Я использую iCloud в своем приложении для загрузки текстовых файлов. При загрузке текстовых файлов этот метод вызывается iCloud, когда я вызываю _UIDocument openWithCompletionHandler:^(BOOL success)
etc:
-(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;
}
Теперь большая проблема возникает, когда documentState равен 8 (UIDocumentStateEditingDisabled) или 12 (UIDocumentStateSavingError & UIDocumentStateEditingDisabled). Обычно это приводит к аварийному завершению работы приложения. Я пытался вернуть NO, если documentState > 7, т.е. если оно равно 8 или 12, но это приводит к тому, что содержимое вообще не загружается.
Я предполагаю, что проблема в том, что UIDocument не загружает ничего в self.books, если редактирование отключено или если произошла ошибка сохранения.
Что было бы хорошей практикой для обработки таких ошибок? Также, почему Apple в своем примере кода не предложила проверять documentState перед загрузкой данных в UIDocument (iCloud Docs)? Видимо, я делаю что-то принципиально неправильно.