Domanda

Vorrei utilizzare un iCloud, ma quando compilo l'app sul simulatore iOS 4.3 si blocca.

dyld: Simbolo non trovato: _OBJC_CLASS _ $ _ NSMetadataQuery

Cosa devo fare per farlo funzionare su iOS 3, 4 e 5?

È stato utile?

Soluzione

Queste API sono state lanciate con ios5, quindi non puoi eseguirle sul simulatore 4 o inferiore, ma per la pubblicazione puoi impostare l'obiettivo di distribuzione minimo della famiglia ios che dovrebbe supportare.

Altri suggerimenti

la mia impressione è:

Dove NSMetadataQuery cambia in id: ex

normale: - (void) loadData: (NSMetadataQuery *) query; cambia in: - (void) loadData: (id) query;

normale: query NSMetadataQuery * @property (ritenzione, non atomica); cambia in: @property (keep, nonatomic) id query;

e controlla iCloud disponibile:

if ([[NSFileManager defaultManager] respondsToSelector:@selector(URLForUbiquityContainerIdentifier:)]) {
        NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
        if (ubiq) {
            // Code for access iCloud here
        }
    }

Quando si utilizza NSMetadataQuery:

id _query = [[NSClassFromString(@"NSMetadataQuery") alloc] init];
// Some code here
[_query startQuery];

Buon divertimento (^_^)

Il modo usuale sarebbe compilarlo con iOS 5 SDK e impostare l'obiettivo di distribuzione sulla versione iOS più vecchia con cui desideri che funzioni.Sta a te però controllare in fase di esecuzione su quali classi e metodi sono disponibili per il sistema corrente.Un utente su iOS 4, ad esempio, non sarà in grado di utilizzare le funzioni fornite solo con iOS 5.

Per verificare la disponibilità delle classi fare:

if ( NSClassFromString(@"NSMetadataQuery") != nil ) {
  //do stuff with NSMetadataQuery here
}

Per verificare la disponibilità dei metodi fare:

if ( [myObject respondsToSelector:@selector(doSomething)] ) {
  //call doSomething on myObject
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top