Я хотел бы использовать iCloud, но когда я компилирую приложение на симуляторе iOS 4.3, оно вылетает.
dyld: символ не найден: _OBJC_CLASS_$_NSMetadataQuery
Что мне сделать, чтобы он работал на iOS 3, 4 и 5?
Я хотел бы использовать iCloud, но когда я компилирую приложение на симуляторе iOS 4.3, оно вылетает.
dyld: символ не найден: _OBJC_CLASS_$_NSMetadataQuery
Что мне сделать, чтобы он работал на iOS 3, 4 и 5?
Этот API был запущен с ios5, поэтому вы не можете запустить его на симуляторе 4 или ниже, но для публикации вы можете установить минимальную цель развертывания семейства ios, которое оно должно поддерживать.
мое мнение:
Где изменить NSMetadataQuery на id: ex
нормальный: - (void) loadData: (NSMetadataQuery *) запрос; изменить на: - (void) loadData: (id) запрос;
обычный: @property (сохранить, неатомарный) NSMetadataQuery *query; изменить на: @property (сохранить, неатомарный) запрос идентификатора;
и проверьте наличие 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];
Получайте удовольствие (^_^)
[[NSClassFromString(@"NSMetadataQuery") alloc] init]
. Вы не можете использовать [NSMetadataQuery alloc]
.
- person kurtzmarc; 05.08.2012
Обычный способ — скомпилировать его с 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
}