Приложение iphone iCloud падает при компиляции на iOS 4
Я бы хотел использовать iCloud, но когда я компилирую приложение на iOS 4.3 Simulator, оно вылетает.
dyld: символ не найден: _OBJC_CLASS_$_NSMetadataQuery
Что я должен сделать, чтобы это работало на iOS 3, 4 и 5?
3 ответа
Эти API были запущены с ios5, поэтому вы не можете запустить его на симуляторе 4 или ниже, но для публикации вы можете установить минимальную цель развертывания семейства ios, которую он должен поддерживать.
Мой sulotion это:
Где NSMetadataQuery изменить на id: ex
обычный: - (void)loadData:(NSMetadataQuery *) запрос; изменить на: - (void)loadData:(id) запрос;
normal: @property (retain, nonatomic) NSMetadataQuery * query; изменить на: @property (retain, nonatomic) id запрос;
и проверьте доступность 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
}