2012-02-14 106 views

回答

4

看一看this

Class cls = NSClassFromString (@"NSFileCoordinator"); 
if (cls) { 
    // Create an instance of the class and use it. 
} else { 
    // Alternate code path to follow when the 
    // class is not available. 
} 

还要检查这个answer明白为什么

你不应该依靠的版本字符串作为设备或操作系统功能的指示。

+0

感谢所有答复。但这就是我需要:) – 2012-02-14 08:46:48

0

我认为最好关闭4.3版本的iCloud功能。你可以在运行时检查iOS版本。在你的特定情况下,你可以检查NSFileCoordinator类的存在与NSClassFromString()函数,但我很确定在互联网上有更多像样的方法来完成这个。

2

只取出来源copilation的:

  1. 点击您的项目文件。
  2. 转到“构建阶段”。
  3. 展开“编译源代码”。
  4. 选择您不想要的文件,然后按部分底部的 处的“ - ”按钮。

或者您可以从项目中删除它(只是删除引用而不是删除文件),它也会将其从本节中删除。

或者你可以创建预处理宏来检查用户是否可以运行功能

// System Versioning Preprocessor Macros 
#define SYSTEM_VERSION_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 
#define SYSTEM_VERSION_GREATER_THAN(v)    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 

/* Usage 
if (SYSTEM_VERSION_LESS_THAN(@"4.0")) { 
    ... 
} 

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"3.1.1")) { 
    ... 
}*/ 

有了这个,你可以检查用户使用什么SYSTEN版本,并且仅建立5.0,但如果它是一个小于5.0的版本,可以使用代码。

0

你可以做一个新的建设目标,并设置一个编译预处理宏象NO_CLOUD然后用

#ifdef NO_CLOUD ... code here ...#else ... cloud code here ... #endif

+0

这个解决方案的副作用是,他最终会得到两个不同的应用程序。 – sch 2012-02-14 08:21:35

+0

确实......但他也明确要求'建立一个4.3版本'... :-)(好吧,蹩脚的借口) – TheEye 2012-02-14 09:22:43

+0

只是出于好奇,是否有可能将两个二进制文件分发为同一个应用程序App Store?或者是否有必要有两个独立的应用程序(一个仅适用于iOS 5,另一个适用于iOS 4.3和iOS 5)? – sch 2012-02-14 09:36:43

0

你必须薄弱环节的framwork的(当你添加一个框架,以项目只需将其设置为可选不需要)。

在H文件你必须输入唯一的,如果你有iOS 5的

#if defined(__IPHONE_5_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0 
#import <Twitter/Twitter.h> 
#import <Accounts/Accounts.h> 
#endif 

和你必须尝试从字符串和测试创建类,看看你是否有一流的M档。同时测试顶部看看班级是否对选择器做出反应。

Class TWTweetComposeViewControllerClass = NSClassFromString(@"TWTweetComposeViewController"); 

    if (TWTweetComposeViewControllerClass != nil) { 
      if([TWTweetComposeViewControllerClass respondsToSelector:@selector(canSendTweet)]) { 
       UIViewController *twitterViewController = [[TWTweetComposeViewControllerClass alloc] init]; 

       [twitterViewController performSelector:@selector(setInitialText:) 
              withObject:NSLocalizedString(@"TwitterMessage", @"")]; 
       [twitterViewController performSelector:@selector(addURL:) 
              withObject:url]; 

       [twitterViewController performSelector:@selector(addImage:) 
              withObject:[UIImage imageNamed:@"yourImage.png"]]; 
       [self.navigationController presentModalViewController:twitterViewController animated:YES]; 
       [twitterViewController release]; 
       } 
      } else { 
//do something else 
} 

我的例子是基于twitter引擎,你必须适应你的类。

0

使用最新的SDK(5.0)进行构建。它会既囤4.3和5.0

而且你可以检查IOS版本

if ([[UIDevice currentDevice] systemVersion] floatValue] >= 5.0f) { 
    // iCloud 
} else { 
    // iCloudless 
}