5

アプリで iCloud を使用してテキスト ファイルをロードしています。テキストファイルをロードするとき、_UIDocument openWithCompletionHandler:^(BOOL success)etcを呼び出すと、iCloud によってこのメソッドが呼び出されます。

    -(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) の場合です。これは通常、アプリのクラッシュにつながります。documentState が > 7 の場合、つまり 8 または 12 の場合は NO を返そうとしましたが、コンテンツがまったく読み込まれません。

問題は、編集が無効になっている場合、または保存エラーが発生した場合、 UIDocument が self.books に何も読み込まないことだと思います。

このようなエラーを処理するための良い方法は何ですか? また、Apple がサンプル コードで、データを UIDocument ( iCloud Docs ) にロードする前に documentState をチェックすることを提案しなかったのはなぜですか? 私は根本的に間違ったことをしていると思います。

4

1 に答える 1

4

紛争管理を実施していますか?

これらのシナリオでは、いくつかのことを試してから、ファイルのロードを再試行して、最初に次のことを確認する必要があります。

[NSFileVersion unresolvedConflictVersionsOfItemAtURL:]

競合がある場合は、それらを解決し、ファイルを開いてみてください。

[NSFileManager evictUbiquitousItemAtURL:]

[NSFileManager startDownloadingUbiquitousItemAtURL:]

それでも開けない場合は、ダウンロード後に再試行してください。

于 2012-02-29T16:07:27.930 に答える