2014-10-16 34 views
2

去年我開發了一個應用程序併發布了iOS 7,並且都很好。我最近更新了iOS 8的應用程序,併發布了更新,其開發目標仍然設置爲iOS 7.現在我收到的電子郵件表明,該應用程序對iOS 7用戶而言是崩潰的,但對於iOS 8用戶來說工作正常。調試後,我發現,是什麼原因導致的崩潰是我上的NSOperation子類中定義的下列財產 -NS_AVAILABLE(10_10,8_0)在iOS 7上編譯時導致崩潰

@property (copy, nonatomic) NSString *name; 

我得到的崩潰是「無法識別的選擇發送到實例」。

在iOS系統中8,蘋果已經增加了以下屬性的NSOperation -

@property (copy) NSString *name NS_AVAILABLE(10_10, 8_0); 

那麼,爲什麼這會導致應用程序在iOS 7崩潰時,我已經定義了在子類的屬性?另外,如何避免將來發生這種情況,因爲Xcode不會給我任何警告?

謝謝。

回答

3

問題出在這裏。您正在使用iOS 8的基本SDK構建應用程序。因此,您的類name屬性不會執行任何操作,因爲編譯器會發現子類(NSOperation)已具有名爲name的屬性。換句話說,當使用iOS 8的基本SDK構建時,編譯器不會在您的子類中合成setter和getter,因爲它與NSOperation是多餘的。

但是,當應用程序被搭載iOS 7,NSOperation(和子類)下運行沒​​有這個name屬性讓您獲得運行時錯誤嘗試使用該屬性的不存在的getter和setter方法。

最好的解決辦法是重命名你的財產。然後你的班級的財產將被生成和使用。