2012-08-22 44 views
3

注意:是的,我知道iOS 6處於NDA之下。這個問題與iOS 6沒有任何關係,期望我參考的類是新的在iOS 6中。「dyld:Symbol not found:」對於靜態庫中的iOS 6獨佔類

我創建了一個靜態框架用於我的幾個項目中,允許我在iOS 6中使用新API,如果它不可用,則會回落到iOS 5等效版本。然而,儘管我一定要經常檢查,如果一類是有效的使用它,像這樣前:

if ([NewClass class]) { 
    NewClass *newClass = [[NewClass alloc] init]; 
    // etc. 
} 

每當我啓動我的應用程序在iOS 5的模擬器,我得到以下錯誤:

dyld: Symbol not found: _OBJC_CLASS_$_NewClass 

(其中NewClass代表iOS 6類)。

這似乎只是使用靜態庫時的一個問題,就好像我包含某些在我的項目中直接引用API的文件並引用它們,它將在沒有問題的情況下啓動。我甚至試圖弱鏈接靜態庫,它仍然崩潰。唯一可行的選擇是弱連接UIKit,但我寧願不必這樣做,因爲UIKit是一個相當大的框架,弱連接需要額外的時間。

所以基本上,我能做些什麼來弱化靜態庫本身的這個類?

回答

3

我猜你的IPHONEOS_DEPLOYMENT_TARGET沒有設置爲iOS 5?我只是有同樣的錯誤,因爲它已經在iOS 6上。將它設置爲iOS 5後,一切都很好。

您可以在Target-> BuildSettings-> IPHONEOS_DEPLOYMENT_TARGET下和Target-> Summary-> iOS Application Target下找到配置。

另一種方法避免這種錯誤的會是這樣:

Class myClass = NSClassFromString(@"NewClass") 
if(myClass) { 
    NSObject *myResult = [myClass aMethod:@"Hello World"]; 
}