2

UIManagedDocumentCore Data を使用しているときに、オブジェクトがdocumentState5 に等しいことがわかりました。UIDocumentドキュメントでは、次の定数のみが定義されています。

enum {     UIDocumentStateNormal          = 0,
   UIDocumentStateClosed          = 1 << 0,
   UIDocumentStateInConflict      = 1 << 1,
   UIDocumentStateSavingError     = 1 << 2,
   UIDocumentStateEditingDisabled = 1 << 3   }; typedef NSInteger UIDocumentState;

これは、0、1、2、4、および 8 になります。5 は、をUIManagedDocument使用する特別な状態である可能性がありますが、どこにも文書化されていません。Core Data スキーマが変更されると、この状態が発生するようです。状態の意味がわかりません。通常、エラー: が表示Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.'されます。永続ストアとして使用するには、ドキュメントを通常の状態で開く必要があるため、これは理にかなっています。

現在、状態が 5 であることを確認し、永続ストアを削除して、これが発生したときに再作成しています。しかし、アプリがライブになり、ユーザー データが保存されるようになると、このようなことはしたくありません。コア データ スキーマを移行するためのベスト プラクティスについては調べていませんがmanagedDocument.documentState == 5、コードでチェックするのもややこしいようです。このドキュメントの状態に関するドキュメントはどこにもありませんか?

更新:今見てみると、これらの定数がこのように定義されている理由は、マスクとしてビットごとに ored できるようにするためであることが理にかなっています。したがって、documentState5 に等しいということは、それが と の両方であることを意味しUIDocumentStateClosedますUIDocumentStateSavingError。ただし、これらのエラーはかなり一般的です。根本原因を絞り込むにはどうすればよいですか?

また、これらのドキュメントの状態をチェックするために私が見たすべてのサンプル コードは、等しいif (managedDocument.documentState == UIDocumentStateClosed)かどうかのチェックを示していますif (managedDocument.documentState & UIDocumentStateClosed)

4

1 に答える 1

2

私はUIDocumentの経験があまりありませんが、ドキュメントの状態はいくつかの状態の組み合わせであるビットマスクdocumentState == 5 == 1 + 4であるように思えますUIDocumentStateClosed + UIDocumentStateSavingError.

ドキュメントベースのアプリ プログラミング ガイド for iOSでは、documentStateは でチェックされることはなく==、常にビット マスクに対してテストされることがわかります。次に例を示します。

-(void)documentStateChanged {
    UIDocumentState state = _document.documentState;
    [_statusView setDocumentState:state];
    if (state & UIDocumentStateEditingDisabled) {
        [_textView resignFirstResponder];
    }
    if (state & UIDocumentStateInConflict) {
        [self showConflictButton];
    }
    else {
        [self hideConflictButton];
        [self dismissModalViewControllerAnimated:YES];
    }
}
于 2013-04-26T07:06:17.580 に答える