2011-11-08 41 views
5

Estoy usando iCloud en mi aplicación para cargar archivos de texto. Al cargar archivos de texto, este método es llamado por iCloud cuando llamo _UIDocument openWithCompletionHandler:^(BOOL success) etc:loadFromContents de iCloud - cómo lidiar con UIDocumentStateSavingError y UIDocumentStateEditingDisabled

-(BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError { 

    NSLog(@"Library loadFromContents: state = %d", self.documentState); 

if (!_books) { 
     _books = [[NSMutableArray alloc] init]; 
    } 

    //if (self.documentState > 7) { 
    // NSLog(@"document is either savingError (4), EditingDisabled (8) or both (12)... will not load"); 
    // return NO; 
    //} 

    self.books = [NSKeyedUnarchiver unarchiveObjectWithData:contents]; 

    if ([_delegate respondsToSelector:@selector(libraryDocumentUpdated:)]) { 
     [_delegate libraryDocumentUpdated:self]; 
    } 

    return YES; 
} 

Ahora el gran problema es cuando documentState es 8 (UIDocumentStateEditingDisabled) o 12 (UIDocumentStateSavingError & UIDocumentStateEditingDisabled). Esto generalmente dará lugar a un bloqueo de la aplicación. Traté de devolver NO si el documentState es> 7, es decir, si es 8 o 12 pero esto no carga ningún contenido.

Supongo que el problema es que el UIDocument no cargará nada en self.books si la edición está deshabilitada o si hubo un error de guardado.

¿Cuál sería una buena práctica para manejar tales errores? Además, ¿por qué Apple no sugirió en su código de muestra para verificar el documentState antes de cargar datos en UIDocument (iCloud Docs)? Supongo que estoy haciendo algo fundamentalmente equivocado.

Respuesta

4

¿Ha implementado la administración de conflictos?

En esos escenarios se debe intentar una serie de cosas vuelva a intentar cargar el archivo de la primera es para comprobar si

[NSFileVersion unresolvedConflictVersionsOfItemAtURL:]

tiene ningún conflicto, resolverlos, vuelva a intentar abrir el archivo,

[NSFileManager evictUbiquitousItemAtURL:]

y

[NSFileManager startDownloadingUbiquitousItemAtURL:]

si todavía no puede abrirlo, vuelva a intentar de nuevo después de que se descargó.

Cuestiones relacionadas