2010-06-21 105 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