注意:是的,我知道iOS 6属于NDA。这个问题与iOS 6无关,我希望我在iOS 6中引用的类是 new 。
我正在创建一个静态框架,可以在我的几个项目中使用,这样我就可以在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是一个相当大的框架,我宁愿不必这样做,弱连接需要额外的时间。
基本上,我该怎样做才能在静态库本身中弱化这个类?
答案 0 :(得分: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"];
}