loadFromContents iCloud - как бороться с UIDocumentStateSavingError & UIDocumentStateEditingDisabled - PullRequest
5 голосов
/ 09 ноября 2011

Я использую iCloud в своем приложении для загрузки текстовых файлов. При загрузке текстовых файлов этот метод вызывается iCloud, когда я вызываю _UIDocument openWithCompletionHandler:^(BOOL success) и т. Д .:

    -(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 )? Я думаю, что я делаю что-то в корне неправильно.

1 Ответ

4 голосов
/ 29 февраля 2012

Реализовано ли у вас управление конфликтами?

В этих сценариях вы должны попытаться выполнить несколько действий, а затем повторить попытку загрузки файла, во-первых, чтобы проверить, если

[NSFileVersion unresolvedConflictVersionsOfItemAtURL:]

есть конфликты, разрешите их, повторите попытку открытия файла,

* * 1010

[NSFileManager evictUbiquitousItemAtURL:]

и

[NSFileManager startDownloadingUbiquitousItemAtURL:]

Если по-прежнему не удается открыть его, повторите попытку после загрузки.

...