3

コア データを使用して整数 (レート) を保存してから、コンテキストで save を呼び出します。

HeartRateBeat * beat = [HeartRateBeat heartRateWithHeartRate:rate
                            ofRecordTitle:self.recordTitle
                   inManagedObjectContext:document.managedObjectContext];

NSError * error;
[document.managedObjectContext save:&error];

その便利なメソッド内で、次のように NSEntityDescription を使用してオブジェクトを作成します。

heartRateBeat = [NSEntityDescription insertNewObjectForEntityForName:@"HeartRateBeat" inManagedObjectContext:context];

(私が何をしたかを示すためだけに、重要なコードをいくつかコピーしただけです。)

すべてのハートビートが挿入され、管理オブジェクトのコンテキストが保存された後 (私はすぐに保存します)、すぐにフェッチ要求を実行します。この要求は、ハートビートがコア データ内に格納されているように見えることを示しています (ハートビートの配列が増加しています)。アプリを再起動します (私はシミュレーターを使用しています) 新しく起動するため、実際にはディスクに保存されていないことがわかっています。SQLite3 コマンド ラインで確認すると、空のテーブルが表示されます。ここで何が欠けていますか?

4

2 に答える 2

4

私は同じ問題を抱えていますが、私のように、xcodeを介してアプリを停止しているだけで、実際には閉じていないからだと思います。このコードを使用して書き込みを強制します。すべてを手動で設定するのではなく、appdelegate を介して共有される UIManagedDocument を使用しています。

NSError *error = nil;

if (![self.managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

[[AppDelegate sharedAppDelegate].userDatabase saveToURL:[AppDelegate sharedAppDelegate].userDatabase.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:nil];
于 2012-11-12T08:43:02.013 に答える