3

注: はい、iOS 6 が NDA の対象であることは知っています。この質問は 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 に答える