1

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 がコア データ スタックを処理していると思ったときに、問題を修正する方法がわかりません。誰にも指針がありますか?

4

0 に答える 0