注意:是的,我知道iOS 6处于保密协议之下。这个问题与iOS 6无关,除了我引用的类是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是一个相当大的框架,弱链接需要额外的时间。
那么,基本上,我能做些什么来弱链接静态库中的这个类呢?
我猜您的IPHONEOS_DEPLOYMENT_TARGET没有设置为iOS 5?我只是遇到了同样的错误,因为它已经在iOS 6上了。在将其设置为iOS 5之后,一切都很好。
您可以在目标->构建设置->IPHONEOS_DEPLOYMENT_Target和目标->摘要->iOS应用程序目标下找到配置。
避免这种错误的另一种方法是:
Class myClass = NSClassFromString(@"NewClass")
if( myClass ) {
NSObject *myResult = [myClass aMethod:@"Hello World"];
}