2013-05-30 4 views
5

私は、MagicalRecordを使用してCore Dataの軽量移行をセットアップしようとすると、レンガの壁にぶつかってきました。 GoogleとSOを使用して、この件に関するすべての投稿を見てきました。 persistentStoreCoordinatorがどのように機能し、どのような設定を行うかについても理解しています。MagicalRecordを使用してCore Data Lightweightマイグレーションを設定するにはどうすればよいですか?

ここに私のコードだ:

AppDeligate.h

NSPersistentStoreCoordinator *persistentStoreCoordinator; 

AppDelegate.m

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 

if (persistentStoreCoordinator != nil) { 
    return persistentStoreCoordinator; 
} 

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"saori.sqlite"]]; 

// handle db upgrade 
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

NSError *error = nil; 
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]]; 

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { 

    // Handle error 
} 

return persistentStoreCoordinator; 

}

私は、WHIを次のエラーを取得しています私は理解しています。いいえ「applicationDocumentsDirectory」

「AppDelegate」の目に見える@interfaceはセレクタを宣言しないと

:私が知らないことは、これらのオブジェクトは、(私は私のアプリで見て、何も見つからなかった)しているところであります

xcdatamodeld

: 'AppDelegate' の目に見える@interfaceは、セレクタ 'managedObjectModel'

私はすでに作成している店舗を宣言する10

ほとんどの場合、私が見たコードのすべてが似ているとは限りません。 MagicalRecordが私のためにこれを処理するかどうかはわかりません。なぜなら、MRを使ってこれを行う方法を示すドキュメントを見つけることができないからです。私の質問は:私はこの仕事をするために何をしなければならないのですか? MagicalRecordの

+0

最後のスクリーンショットでは、新しいモデルがまだアクティブにされていないため、古いモデルが引き続き使用されます。 –

答えて

11

全体のポイントは、これはあなたのために管理されていることである。

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:####]; 

コアデータ・スタックのセットアップhereに関するドキュメントを確認してください。質問の私の理解のよう

+0

はい、私はそれを読んでいましたが、MRは私にとってはすべてのことを実現するとは思いませんでした!私はすでにあなたのコードを少し持っていた。ありがとうございました... もう1つ質問:私はDEBUGフラグを使用せず、新しいモデルを自分で作成しても、MRはまだそれを見つけるか、DEBUGフラグを使用してMRに通知します移行?その場合、アプリがAppStoreにあるときにこれをどのように処理するのですか? – SpokaneDude

+0

移行は、特定のフラグをコアデータに渡すことによって処理されます。これにより、Core Dataは利用可能なモデルバージョンをチェックし、それらを使用して自動的に差分を検出して修正します。 – Wain

+0

MagicalRecordは、同じモデルの複数のバージョンが存在しない限り、バンドル内のすべてのモデルをロードしてマージします。その後、最新のバージョンのみをマージします。これは+ [NSManagedObjectModel managedObjectModelsFromBundle:]メソッドのデフォルトのCore Dataビヘイビアであり、これはMagicalRecordがモデルの読み込みにも使用するものです。 – casademora

8

から作成された新しいモデルに変更し、あなたがモデルのバージョンを変更していない場合は、この

[MagicalRecord setupAutoMigratingCoreDataStack]

を使用することをお勧め次のすべてを確認してください:

あなたのAppDelegateで。メートルのファイル:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    [MagicalRecord setupAutoMigratingCoreDataStack]; 
    ... 
} 

あなたはすでにあなたのモデルをバージョン管理していない場合:

  • データモデルを選択し

Select your data model

  • エディタ - >モデルバージョンを追加します。

    enter image description here

  • 名前の新しいバージョンは、[完了

enter image description here

  • は今、2つのバージョンがあるはずです。図のようにファイルを選択します。

enter image description here

  • 変更モデルバージョン新しいバージョン

enter image description here

  • への新しいバージョンは、今
をチェックする必要があります

enter image description here

関連する問題