3

注意:是的,我知道 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 是一个相当大的框架,并且弱链接需要额外的时间。

所以基本上,我能做些什么来弱链接静态库本身中的这个类?

4

1 回答 1

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"];
}
于 2012-09-03T15:59:25.520 回答