2012-11-24 60 views
0

崩潰我運行一些代碼,做了[NSDictionary的objectForKeyedSubscript:],它的崩潰在iOS 5,但不是的iOS 6,我使用的Xcode 4.5.2和反編譯了iOS 6.0 SDK。objectForKeyedSubscript:在iOS 5.1

我認爲這將在iOS 5上工作,因爲它只是一個編譯器功能?我錯了嗎?我只能寫我自己的這些函數版本,但我擔心別的錯誤,因爲我希望它能夠工作。

回答

2

OK,我要回答我自己的問題,雖然我不完全理解爲什麼它是失敗。

使用objectForKeyedSubscript:和iOS 5的類似工作正常運行(只要它是對iOS 6的SDK編譯)。

問題是我命名了一個函數+(void)load,並且在此函數中調用objectForKeyedSubscript:調用導致由於未找到該方法而導致聲明。

這是由於我的命名錯誤,因爲load方法被稱爲應用程序完全運行之前。我改變了我的功能名稱,一切都很好。

我假設+負載被調用之前,與NSDictionary完全inited。奇怪的是,它的工作原理的iOS 6下,只是沒有的iOS 5

也許這不是奇怪。

+1

的事情是,這些功能都被編譯成的iOS 6,但在iOS 5中,他們都在「加載」功能添加的內部類。如果該順序錯誤(順序不能保證),那麼你的類將在運行時實際添加它之前嘗試使用它。以下是一些細節 - > http://www.mikeash.com/pyblog/friday-qa-2012-06-22-objective-c-literals.html#comment-c4ce71c3d04c25f8f40c2b5c5e130a29 – borrrden