0

データのインポートとエクスポートに適した Core Data モデルがあります。私のアプリが動作する方法は、JSON ファイルをデータベースからダウンロードして解析し、コア データ モデルをフラッシュしてから、データを再度追加することです (事実上、ローカル データ モデルを更新します)。

データベースに変更を加えると、その変更は JSON ファイルに反映されますが、アプリを再起動する (つまり、アプリを終了して再度開く) まで、コア データ モデルには反映されません。

データベースをフラッシュする方法と関係があるに違いないと確信していますが、指を置くことはできません。役立つコードを以下にいくつか含めました。

データモデルをフラッシュするために使用している方法:

- (void)resetCoreData;
{    
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"AppWithCoreData.sqlite"];

    NSFileManager *fileManager = [NSFileManager defaultManager];

    [fileManager removeItemAtURL:storeURL error:NULL];

    NSError* error = nil;

    if([fileManager fileExistsAtPath:[NSString stringWithContentsOfURL:storeURL encoding:NSASCIIStringEncoding error:&error]])
    {
        [fileManager removeItemAtURL:storeURL error:nil];
    }

    persistentStoreCoordinator = nil;
    managedObjectContext = nil;

    [self managedObjectContext]; // Rebuild Object Context    
}

データ モデルにデータを追加するために使用しているコードの 1 行:

[model setValue:[dictionary objectForKey:@"eventID"] forKey:@"eventID"];
4

1 に答える 1

2

通常、変更をコア データ ストアに保存する必要がある場合は、それらを保存する必要があります。

それを達成するには、呼び出す必要があります

NSError* error = nil;
[managedObjectContext save:&error];

このようにして、実行した変更がディスクに保存されます。実際、特定のエンティティの属性の値などを単純に変更した場合、それはメモリ内でのみ使用できます。

アプリのデリゲートでデリゲートをリッスンしapplicationWillTerminate、そこでコンテキストを保存するため、変更は次の再起動時にのみ利用できると思います。Xcode テンプレートで提供される Core Data Stack を使用していますか?

可能であれば、詳細をお知らせください。お役に立てるかもしれません。

それが役立つことを願っています。

于 2012-07-22T16:00:27.527 に答える