崩潰我運行一些代碼,做了[NSDictionary的objectForKeyedSubscript:],它的崩潰在iOS 5,但不是的iOS 6,我使用的Xcode 4.5.2和反編譯了iOS 6.0 SDK。objectForKeyedSubscript:在iOS 5.1
我認爲這將在iOS 5上工作,因爲它只是一個編譯器功能?我錯了嗎?我只能寫我自己的這些函數版本,但我擔心別的錯誤,因爲我希望它能夠工作。
崩潰我運行一些代碼,做了[NSDictionary的objectForKeyedSubscript:],它的崩潰在iOS 5,但不是的iOS 6,我使用的Xcode 4.5.2和反編譯了iOS 6.0 SDK。objectForKeyedSubscript:在iOS 5.1
我認爲這將在iOS 5上工作,因爲它只是一個編譯器功能?我錯了嗎?我只能寫我自己的這些函數版本,但我擔心別的錯誤,因爲我希望它能夠工作。
OK,我要回答我自己的問題,雖然我不完全理解爲什麼它是失敗。
使用objectForKeyedSubscript:
和iOS 5的類似工作正常運行(只要它是對iOS 6的SDK編譯)。
問題是我命名了一個函數+(void)load
,並且在此函數中調用objectForKeyedSubscript:
調用導致由於未找到該方法而導致聲明。
這是由於我的命名錯誤,因爲load方法被稱爲應用程序完全運行之前。我改變了我的功能名稱,一切都很好。
我假設+負載被調用之前,與NSDictionary完全inited。奇怪的是,它的工作原理的iOS 6下,只是沒有的iOS 5
也許這不是奇怪。
NSDictionary reference for IOS in Apple developer
可提供的iOS 6.0及更高版本。
有預iOS6的軟件開發工具包解決方法
結帳的問題在這裏:Is there any way to get the neat Objective-C literal indexing feature in Xcode 4.4?
的事情是,這些功能都被編譯成的iOS 6,但在iOS 5中,他們都在「加載」功能添加的內部類。如果該順序錯誤(順序不能保證),那麼你的類將在運行時實際添加它之前嘗試使用它。以下是一些細節 - > http://www.mikeash.com/pyblog/friday-qa-2012-06-22-objective-c-literals.html#comment-c4ce71c3d04c25f8f40c2b5c5e130a29 – borrrden