1

2 つの CoreData データベースを移行したいと考えています。Apple 開発者向けドキュメントを読みました。

最初のデータベースでは、新しいバージョンのデータベースにいくつかの属性 (文字列、整数、および日付のプロパティ) を追加しました。すべての手順に従って、最初の手順で移行を正常に完了しました。

しかし、2 番目のデータベースでは、新しいバージョンのデータベースに属性 (文字列、整数、日付、変換可能およびバイナリ データ プロパティ) も追加しました。すべての手順を実行すると (最初のデータベースと同様)、システムはエラー (134130) を返します。

コードは次のとおりです。

if (persistentStoreCoordinator_) {
    PMReleaseSafely(persistentStoreCoordinator_);
}

// Notify
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:GCalWillMigrationNotification object:self];

//
NSString *sourceStoreType = NSSQLiteStoreType;
NSString *dataStorePath = [PMUtility dataStorePathForName:GCalDBWarehousePersistentStoreName];
NSURL *storeURL = [NSURL fileURLWithPath:dataStorePath];
BOOL storeExists = [[NSFileManager defaultManager] fileExistsAtPath:dataStorePath];

//
NSError *error = nil;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                        [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                        [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
[persistentStoreCoordinator_ addPersistentStoreWithType:sourceStoreType
                                          configuration:nil
                                                    URL:storeURL
                                                options:options
                                                  error:&error];
if (error != nil) {
    abort();
}

エラーはゼロではなく、以下はログです:

エラー Domain=NSCocoaErrorDomain Code=134130 "操作
完了できませんでした。(Cocoa エラー 134130)" UserInfo=0x856f790
{URL=file://localhost/Users/greensun/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/D10712DE-D9FE-411A-8182-C4F58C60EC6D/Library/Application%20Support/XXX/XXX.sqlite,
メタデータ={タイプ=不変辞書、
カウント = 7、エントリ => 2 : {コンテンツ =
"NSStoreModelVersionIdentifiers"} = {タイプ = 不変、カウント = 1、値 = ( 0 : {内容 = ""} )} 4 : {内容 = "NSPersistenceFrameworkVersion"} = {値 = +386、タイプ = kCFNumberSInt64Type} 6 :
{内容=
"NSStoreModelVersionHashes"} = {タイプ = 不変辞書、カウント = 2、エントリ => 0 :
{内容 = "XXX"} = {長さ = 32、容量 = 32、バイト =
0xfdae355f55c13fbd0344415fea26c8bb ... 4c1721aadd4122aa} 1 :
{内容 = "XXX"} = {長さ = 32、容量 = 32、バイト =
0x7676888f0d7eaff4d1f844343028ce02 ... 040af6cbe8c5fd01} 7 :
{contents = "NSStoreUUID"} = {contents =
"51678BAC-CCFB-4D00-AF5C-8FA1BEDA6440"} 8: {contents = "NSStoreType"} = {contents = "SQLite"} 9: {contents = "_NSAutoVacuumLevel"} = {contents = "2"} 10: {contents = "NSStoreModelVersionHashesVersion"} =
{値 = +3、タイプ =
kCFNumberSInt32Type} }, reason=ソース ストアのモデルが見つかりません}

私は多くの解決策を試しましたが、うまくいきません。2 つの新しいバージョンのデータベースに属性を追加するだけで、1 回の移行に成功します。

4

1 に答える 1

1

これは、iOS5 の Apple フレームワークのバグです。あなたは Apple iOS Developer Program のメンバーだと思いますので、Apple Developer Forumsでそれについて読むことができます。

つまり、たとえば 2 つの永続ストアのように複数のモデルがある場合 (ただし、それだけではありません)、場合によっては、1 つのデータ モデルの新しいバージョンを追加することはできず、他のモデルは現在のバージョンのままです。

Apple に送信され、重複としてマークされています。これがiOS6でまだ修正されているかどうかはわかりません。

于 2012-06-21T06:37:53.467 に答える