3日前にTwinstonesというアプリをリリースしましたが、私はそれを絶えず更新していますが、 。ユーザーが初めてアプリを開いたとき(基本的に毎回)、NSUserDefaults
オブジェクトを使用して、モデルオブジェクトの初期設定が行われているかどうかを確認します。デフォルトオブジェクトの値が0の場合は、セットアップを初期化し、1の場合はセットアップを無視します。既存のアプリケーション用の新しいエンティティのCore Dataマイグレーションの実装方法(必要な場合)
明らかに、ゲームをダウンロードした70人全員の初期セットアップが完了していることは明らかです。
最初のレベルのチュートリアルにEntityを追加し、コアデータを使用してチュートリアルが表示されているかどうかを確認したいと思います。これは、古いモデルのオブジェクトをこの新しいエンティティを持つ新しいもの。最初のレベルでチュートリアルを実行するかどうかを判断するには、別のNSUserDefault
オブジェクト(初期設定と同じ方法で適用)を使用するだけですか?
ない場合は、ここでは管理対象オブジェクトコンテキスト、管理オブジェクトモデル、および永続ストアコーディネータのための私のコードです:私のpersistantStoreCoordinator
方法で
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
// from website
- (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"ScoreModel" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
// from website
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory]
URLByAppendingPathComponent:@"Twinstones.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:nil
error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
は、どのように私は、マイグレーションを実行するのでしょうか?デフォルトのオブジェクトが既に初期化されていることを考えると、別のデフォルトオブジェクトを追加し、現在のモデルオブジェクトへの参照を取得し、それを移行して新しいエンティティを追加する必要があるように感じます。
実際にこれを実行したことがないので、実際にコードにクラックを入れることはありません(このマイグレーションが必要な場合もあります)。私がちょうどデータを格納するプロパティリストが決して悪意のあることになることはないという保証がある別のNSUserDefaults
オブジェクトを使用することができれば、私はそれを行います。あなたはpersistentStoreCoordinator
に店舗を追加するときに、コンフィギュレーションオプションについて
NSDictionary* configuration = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption:@YES
};
: