Приложение 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
}
Другие вопросы по тегам