iCloud を使用したいのですが、iOS 4.3 シミュレーターでアプリをコンパイルするとクラッシュします。
dyld: シンボルが見つかりません: _OBJC_CLASS_$_NSMetadataQuery
iOS 3、4、および 5 で動作させるにはどうすればよいですか?
iCloud を使用したいのですが、iOS 4.3 シミュレーターでアプリをコンパイルするとクラッシュします。
dyld: シンボルが見つかりません: _OBJC_CLASS_$_NSMetadataQuery
iOS 3、4、および 5 で動作させるにはどうすればよいですか?
私の提案は次のとおりです。
NSMetadataQuery が id に変更された場所: ex
通常: - (void)loadData:(NSMetadataQuery *)query; - (void)loadData:(id)query; に変更します。
通常: @property (保持、非アトミック) NSMetadataQuery *query; 変更: @property (retain, nonatomic) id query;
利用可能なiCloudを確認します:
if ([[NSFileManager defaultManager] respondsToSelector:@selector(URLForUbiquityContainerIdentifier:)]) {
NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiq) {
// Code for access iCloud here
}
}
NSMetadataQuery を使用する場合:
id _query = [[NSClassFromString(@"NSMetadataQuery") alloc] init];
// Some code here
[_query startQuery];
楽しんでください(^_^)
通常の方法は、iOS 5 SDK を使用してコンパイルし、展開ターゲットを、動作させたい最も古い iOS バージョンに設定することです。ただし、実行時に現在のシステムで使用できるクラスとメソッドを確認するのはあなた次第です。たとえば、iOS 4 のユーザーは、iOS 5 でのみ出荷される機能を使用できません。
クラスの可用性を確認するには、次のようにします。
if ( NSClassFromString(@"NSMetadataQuery") != nil ) {
//do stuff with NSMetadataQuery here
}
メソッドの可用性を確認するには、次のようにします。
if ( [myObject respondsToSelector:@selector(doSomething)] ) {
//call doSomething on myObject
}
これらの API は ios5 で起動されているため、シミュレーター 4 以下で実行することはできませんが、投稿のために、サポートする必要がある ios ファミリの最小展開ターゲットを設定できます。