2011-02-17 58 views
0

我们正在构建一个处理iPhone通讯录的应用程序。在4.0版本中,Apple在地址簿中实现了源代码,并且还有一些方法(用于检索源代码,写入源代码等)。这个功能在iOS 4.0以下版本中不存在。使用iOS 4.0的方法时,iOS 3.0会崩溃吗?

我们已经更新了我们的应用程序,以适应大约4.0和4.2处理地址簿来源的方式,但我没有在3.0设备上进行测试。

一般来说,如果您在较旧版本的操作系统上使用更新的SDK方法,应用程序是否会中断?

谢谢!

回答

2

是的,它会崩溃。

请检查应用程序运行在哪个版本的iOS上,以确定是使用某种功能还是将有问题的电话置于if ([object respondsToSelector:@selector]) {}之内。

如果你不想处理这个问题,并确保它永远不会崩溃,只需让你的应用程序可用于iOS 4.0和更高版本。

2

是的,它会崩溃。但是有办法可以防止这种情况发生。

昨天我做了一些类似Event Kit的事情。

我创建了自己的EventHandler对象,如果没有Event Kit,它将在init中返回nil。调用nil是完全合法的,所以这个抽象类可以防止iOS3上的崩溃。我不需要为每次打电话都做NSClassFromString检查。

由于缺少iOS3设备,我无法测试它,但我希望它能正常工作。

- (id)init { 
    self = [super init]; 
    if (self) { 
     Class eventKitClass = NSClassFromString(@"EKEventStore"); 
     if(eventKitClass) { 
      // iOS4++ 
      // more init 
     } 
     else { 
      // iOS3 
      [self release]; 
      return nil; 
     } 
    } 
    return self; 
} 

你必须弱连接Event Kit框架。 [目标/你的目标/获取信息/一般]

编辑:我误读你的问题,你不问有关事件包。但这种方法也适用于地址簿框架。

EDIT2:由于地址簿自iOS 2.0起可用,我的方法对您来说没用。
你必须使用

if ([foo respondsToSelector:@selector(doSomething:)]) { 
    [foo doSomething:bar]; 
} 

每个调用你做,可能不会出现在IOS3。像其他回答者说的那样。

+0

无论谁打开这个,必须具有和我一样的阅读理解问题^^ – 2011-02-17 10:33:28