2011-12-27 8 views
1

オンラインカタログのためにコアデータを使用しています。アプリストアで利用できるようになりました。フィールドと属性。新しいものに移行しましたが、既にアプリに保存されていた古いデータは完全に消滅しています。私はこのコードを使用してそれを保持する様々な方法を試しましたコアデータマイグレーションxcode 4.2は、既にアプリケーションストアのアプリデータを更新していません

NSString *databaseFilePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"App_iOS.sqlite"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    [fileManager removeItemAtPath:databaseFilePath error:NULL]; 

    NSURL *storeUrl = [NSURL fileURLWithPath: databaseFilePath]; 

    NSError *error = nil; 
    if(![[self persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration: nil URL:storeUrl options:nil error:&error]) 
    { 
     [__managedObjectContext insertObjects]; 
    } 
    else 
    { 
     [__managedObjectContext updatedObjects]; 
    } 

私は解決策をまだアプリケーションに残していません。私はインターネットでこの問題のほとんどを同じ問題で探しましたが、まだ良い解決策を受け取っていません。

+0

[link] http://stackoverflow.com/questions/1018155/what-do-i-have-to-do-to-to-core-data-to-automatically-migrate-modelsこの回答は非常に役に立ちますコアデータ更新を達成する。全てに感謝!!! –

答えて

1

私は今、これは非常に簡単であることが判明しました - 。あなたが見てどこを知っていれば# 私AppDelegateで、私はアップセットNSPersistentStoreCoordinator - とあなたが処理するためにそれを伝えるためにこれにいくつかのオプションを追加する必要があります自動移行:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 

    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 

    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

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

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType  configuration:nil URL:storeUrl options:options error:&error]) { 
          // Handle error 
        NSLog(@"Problem with PersistentStoreCoordinator: %@",error); 
    } 

が次にあなたがXcodeで実行する必要があります。これは素晴らしいと私は望んでいたような単純なようだ

1. Select your xcdatamodeld file 
2. Select the Editor Menu at the top - then choose Add Model Version 
3. Now your xcdatamodeld file have two (modelname.xcdatamodel & modelname2.xcdatamodel) . 
4. Now modelname.xcdatamodel have the green check mark implies it is current version, but we need to change the modelname2.xcdatamodel as a current version 
5. Select the xcdatamodeld file and then select the View Menu at the top - then Choose Utilities - then Choose the Show File Inspector is shown in right side of Xcode and then Select the Versioned Core Data Model - have Current(DropDownList) - select modelname2(the one you just made current version have green check mark). 
6. Now when you install this version onto a device that has the old model - it will automatically upgrade that model to the new model. 

- しかし、私はあなたが変更として開発中に注意する必要があると思いますモデル - それ以外の場合は、 o変更ごとに新しいバージョンを作成する。

変更したファイルをすべて保存してから、アップデートを展開する準備ができたら、すべての中間ファイルを削除し、最も古いモデルと最新のモデルで展開します。

0

データ移行技術を使用する必要があります。私は似たような仕事に直面した。
これにはチュートリアルがあります。 Data migration.

関連する問題