【问题标题】:Would iOS 3.0 crash when using methods from iOS 4.0?使用 iOS 4.0 中的方法时,iOS 3.0 会崩溃吗?
【发布时间】:2011-02-17 10:13:31
【问题描述】:

我们正在构建一个处理 iPhone 通讯录的应用程序。在 4.0 版中,Apple 在地址簿中实现了源,并且还提供了一些方法(检索源、写入源等)。此功能在小于 4.0 的 iOS 中不存在。

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

一般来说,如果您在没有这些方法的旧版本操作系统上使用更新的 SDK 方法,应用程序会崩溃吗?

谢谢!

【问题讨论】:

    标签: iphone iphone-sdk-3.0 ios4


    【解决方案1】:

    是的,它会崩溃。

    要么检查应用程序运行的 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 中可能不存在。就像其他回答者所说的那样。

      【讨论】:

      • 谁赞成这个必须和我有相同的阅读理解问题^^
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多