2011-10-19 12 views

risposta

27

Edit:
Se si prendono di mira iOS6 o superiore è possibile utilizzare [[NSFileManager defaultManager] ubiquityIdentityToken];. Per esempi di utilizzo, fare riferimento a @Dj S' answer :).
è più veloce e più facile che la soluzione originale che è stato pensato per le persone destinate iOS5 e soprattutto

risposta originale
Come documentato in iOS App programming guide - iCloud Storage. Che possono essere controllati chiedendo l'URL del contenitore ubiquità per il file manager :)

Finché si fornisce un identificatore contenitore di ubiquità valida sotto metodo deve restituire SI

- (BOOL) isICloudAvailable 
{ 
    // Make sure a correct Ubiquity Container Identifier is passed 
    NSURL *ubiquityURL = [[NSFileManager defaultManager] 
     URLForUbiquityContainerIdentifier:@"ABCDEFGHI0.com.acme.MyApp"]; 
    return ubiquityURL ? YES : NO; 
} 

Tuttavia, ho trovato che URLForUbiquityContainerIdentifier: potrebbe richiedere diversi secondi la prima volta in una sessione (l'ho usato in iOS5, quindi le cose potrebbero essere diverse ora). Mi ricordo di usare qualcosa di simile a questo:

dispatch_queue_t backgroundQueue = 
    dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(backgroundQueue,^{ 
    BOOL isAvailable = [self isICloudAvailable] 
    /* change to the main queue if you want to do something with the UI. For example: */ 
    dispatch_async(dispatch_get_main_queue(),^{ 
     if (!isAvailable){ 
     /* inform the user */ 
     UIAlertView *alert = [[UIAlertView alloc] init...] 
     [alert show]; 
     [alert release]; 
     } 
    }); 
}); 
+0

soluzione eccellente. – NSSplendid

+1

Sfortunatamente quel collegamento al documento Apple non funziona. È possibile cercare URLForUbiquityContainerIdentifier qui però: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html – Oscar

+0

Apple cambia costantemente posizioni, il collegamento viene aggiornato. :) – nacho4d

17

Proprio per integrare la risposta di cui sopra, se desideri solo sapere se iCloud è disponibile per la vostra applicazione, per esempio
1. nessun account iCloud è configurato, o
2. I documenti e dati è disattivata (per tutte le applicazioni), o
3. I documenti e dei dati è disattivata per la vostra applicazione solo

quindi è possibile utilizzare per NSFileManager's ubiquityIdentityTokeniOS 6 e versioni successive.
Se il valore è zero, l'account iCloud non è configurato. Altrimenti, l'account iCloud è configurato.

id token = [[NSFileManager defaultManager] ubiquityIdentityToken]; 
if (token == nil) 
{ 
    // iCloud is not available for this app 
} 
else 
{ 
    // iCloud is available 
} 

Nota che secondo Apple docs, si può chiamare dal thread principale.

Poiché questo metodo ritorna in tempi relativamente brevi, è possibile chiamarlo al momento del lancio e puoi chiamarlo dal thread principale della tua app.

Problemi correlati