【问题标题】:NSXMLParserDelegate and iPhone SDK 3.1.XNSXMLParserDelegate 和 iPhone SDK 3.1.X
【发布时间】:2026-01-21 01:55:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone nsxmlparser


    【解决方案1】:

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

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

    在 iOS4 SDK 中添加了 NSXMLParserDelegate 协议。在 SDK 的早期版本中,XML 解析器委托方法是在一个类别中声明的。在 iOS4 中,这些方法已被移至专用协议,这使得它更干净一些。在运行时,没有区别。编译后,该应用程序对协议或类别一无所知。 NSXMLParser 将简单地检查是否实现了特定的委托方法(通过 respondsToSelctor),因此它会正常运行。

    一般来说,用iOS4 SDK构建并在3.0上运行是没有问题的。您必须确保不调用 3.0 中不存在的任何方法。这很容易通过调用 respondsToSelector 来实现。它允许您创建在所有操作系统版本上运行的单个应用程序,但仍允许您调用特定于 4.0 的方法。

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

    【讨论】:

    • 那么我们如何在接口声明中添加 而不会在旧版本中出现错误.. 在旧操作系统中具有 NSXMLParserDelegate 的类别类是什么..
    • 只需将协议添加到您的解析器类。在 3.0 上运行它时不会出现错误。正如我所说,该应用程序在运行时对协议或类别一无所知。这只是一个编译器的事情。