UIManagedDocument
Core Data を使用しているときに、オブジェクトがdocumentState
5 に等しいことがわかりました。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 できるようにするためであることが理にかなっています。したがって、documentState
5 に等しいということは、それが と の両方であることを意味しUIDocumentStateClosed
ますUIDocumentStateSavingError
。ただし、これらのエラーはかなり一般的です。根本原因を絞り込むにはどうすればよいですか?
また、これらのドキュメントの状態をチェックするために私が見たすべてのサンプル コードは、等しいif (managedDocument.documentState == UIDocumentStateClosed)
かどうかのチェックを示していますif (managedDocument.documentState & UIDocumentStateClosed)
。