2010-06-21 104 views
3

我有一个商店的应用程序,它是为3.1.2构建的,但在4.0GM下崩溃。我已经使用Xcode 3.2.3修复了崩溃问题,但也得到了警告,即这样的类没有实现NSXMLParserDelegate。我添加到标题,一切都很好。我现在提交了应用程序,正在等待审核。这个最新版本是用4.0的基本SDK编译的,部署目标是3.1.2。NSXMLParserDelegate和iPhone SDK 3.1.X

我遇到的问题是,今天早上我打开了Xcode 3.2.2中的项目,并且在针对3.1.2的基本SDK构建时,出现了编译错误,说NSXMLParserDelegate不存在。这是否意味着我的应用程序正在等待审核将在3.1.2设备下崩溃?这很奇怪,因为我的beta测试人员正在使用3.1.3,我认为3.1.2表示该应用工作正常。如果它不能在3.1.2的基础SDK上编译,它不应该崩溃吗?

我认为这应该可以讨论关于4.0 NDA,因为我的问题是特定于3.1.X.

回答

4

首先,本周NDA已经解除了,所以没有问题讨论iOS 4.0 SDK。

至于你的问题:编译和运行应用程序是有区别的。

在iOS4 SDK中添加了NSXMLParserDelegate协议。在之前的SDK版本中,XML分析器委托方法在类别中声明。在iOS4中,这些方法已被转移到专用协议,这使得它更加清洁。在运行时,没有区别。编译完成后,该应用程序不知道有关协议或类别的任何信息。 NSXMLParser将简单地检查是否实现了特定的委托方法(通过respondsToSelctor),因此它运行得很好。

通常,使用iOS4 SDK构建并在3.0上运行并不是问题。你必须确保你不要调用任何在3.0中不存在的方法。通过调用respondsToSelector这很容易做到。它允许你创建一个在所有操作系统版本上运行的应用程序,但仍允许你调用4.0特定的方法。

我希望这是有道理的...

+0

有道理,并感谢您的解释。全清。 – 2010-06-23 11:36:32

+0

那么我们如何在接口声明中添加,而不会在旧版本中出现错误..什么是旧OS中具有NSXMLParserDelegate的类别类。 – 2010-08-22 08:56:23

+0

只需将协议添加到解析器类中。在3.0上运行时不会出错。正如我所说的,应用程序在运行时并不知道有关协议或类别的任何信息。这只是一个编译器。 – 2010-08-23 08:40:37