O aplicativo iphone iCloud trava ao compilar no iOS 4
-
27-10-2019 - |
Pergunta
Eu gostaria de usar um iCloud, mas quando compilo o aplicativo no simulador iOS 4.3 ele trava.
dyld: Símbolo não encontrado: _OBJC_CLASS _ $ _ NSMetadataQuery
O que devo fazer para que funcione no iOS 3, 4 e 5?
Solução
Esta API foi lançada com o ios5, então você não pode executá-la no simulador 4 ou inferior, mas para postagem, você pode definir o destino mínimo de implantação da família ios que ela deve suportar.
Outras dicas
meu sentimento é:
Onde NSMetadataQuery mudou para id: ex
normal: - (void) loadData: (NSMetadataQuery *) consulta; mude para: - (void) loadData: (id) query;
normal: consulta @property (reter, não atômica) NSMetadataQuery *; mude para: consulta de id @property (reter, não atômico);
e verifique o iCloud disponível:
if ([[NSFileManager defaultManager] respondsToSelector:@selector(URLForUbiquityContainerIdentifier:)]) {
NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiq) {
// Code for access iCloud here
}
}
Quando usar NSMetadataQuery:
id _query = [[NSClassFromString(@"NSMetadataQuery") alloc] init];
// Some code here
[_query startQuery];
Divirta-se (^_^)
A maneira usual seria compilá-lo com o iOS 5 SDK e definir o destino de implantação para a versão mais antiga do iOS com a qual gostaria de trabalhar.Cabe a você verificar em tempo de execução quais classes e métodos estão disponíveis para o sistema atual.Um usuário no iOS 4, por exemplo, não será capaz de usar funções que vêm apenas com o iOS 5.
Para verificar a disponibilidade das aulas faça:
if ( NSClassFromString(@"NSMetadataQuery") != nil ) {
//do stuff with NSMetadataQuery here
}
Para verificar a disponibilidade dos métodos, faça:
if ( [myObject respondsToSelector:@selector(doSomething)] ) {
//call doSomething on myObject
}