UIManagedDocument を使用して、構築中のアプリケーションでコア データ スタックを設定しようとしています。init メソッドにこれを持つオブジェクト DocumentController があります。
- (id)init
{
if (self = [super init]) {
//custom initialization
NSString *path = [[DMDocumentController documentsDirectory] stringByAppendingPathComponent:@"logDatabase"];
NSURL *documentURL = [NSURL fileURLWithPath:path];
self.managedDocument = [[UIManagedDocument alloc] initWithFileURL:documentURL];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
self.managedDocument.persistentStoreOptions = options;
}
return self;
}
次に、ブロック内のドキュメントにアクセスできるようにする performWithDocument を呼び出すこのブロック メソッドを取得しました。ブロックは次のように定義されます。
typedef void (^OnDocumentReady) (UIManagedDocument *document);
メソッドは次のようになります。
- (void)performWithDocument:(OnDocumentReady)onDocumentReady
{
void (^OnDocumentDidLoad)(BOOL) = ^(BOOL success) {
onDocumentReady(self.managedDocument);
};
if (![[NSFileManager defaultManager] fileExistsAtPath:[self.managedDocument.fileURL path]]) {
[self.managedDocument saveToURL:self.managedDocument.fileURL
forSaveOperation:UIDocumentSaveForCreating
completionHandler:OnDocumentDidLoad];
} else if (self.managedDocument.documentState == UIDocumentStateClosed) {
[self.managedDocument openWithCompletionHandler:OnDocumentDidLoad];
} else if (self.managedDocument.documentState == UIDocumentStateNormal) {
OnDocumentDidLoad(YES);
}
}
とにかく、新しいエンティティを挿入しようとすると、アプリが数秒後に(保存しようとすると)クラッシュし、タイトルにエラーメッセージが表示されます。UIManagedDocument がコア データ スタックを処理していると思ったときに、問題を修正する方法がわかりません。誰にも指針がありますか?