1

我想用 2 个 CoreData 数据库进行迁移。我已经阅读了苹果开发者文档

对于第一个数据库,我在新版本的数据库中添加了一些属性(字符串、整数和日期属性)。按照所有步骤,我已经成功完成了第一个迁移。

但是在第二个数据库中,我还在新版本的数据库中添加了属性(字符串、整数、日期、可转换和二进制数据属性)。并且按照所有步骤(如第一个数据库),系统返回错误(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();
}

错误不是零,以下是日志:

Error Domain=NSCocoaErrorDomain Code=134130 "操作
无法完成。(可可错误 134130。)“用户信息 = 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"} = {type = immutable, count = 1, values = ( 0 : {contents = ""} )} 4 : {contents = "NSPersistenceFrameworkVersion"} = {value = +386, type = kCFNumberSInt64Type} 6:
{内容=
"NSStoreModelVersionHashes"} = {type = immutable dict, count = 2, entries => 0 :
{contents = "XXX"} = {length = 32, capacity = 32, bytes =
0xfdae355f55c13fbd0344415fea26c8bb ... 4c1721aadd4122aa} 1:
{contents = "XXX"} = {length = 32, capacity = 32, bytes =
0x7676888f0d7eaff4d1f844343028ce02 ... 040af6cbe8c5fd01} } 7 :
{内容 = “NSStoreUUID”} = {内容 =
“51678BAC-CCFB-4D00-AF5C-8FA1BEDA6440”} 8:{contents = “NSStoreType”} = {contents = “SQLite”} 9:{contents = “_NSAutoVacuumLevel”} = {contents = “2”} 10:{contents = "NSStoreModelVersionHashesVersion"} =
{值 = +3,类型 =
kCFNumberSInt32Type} }, reason=找不到源存储的模型}

我尝试了很多解决方案,但它不起作用。我只是将更多属性添加到 2 个新版本数据库中,并成功迁移一次。

4

1 回答 1

1

这是 iOS5 中 Apple 框架中的一个错误。我假设您是 Apple iOS Developer Program 的成员,因此您可以在Apple Developer Forums中阅读有关它的信息。

简而言之,这意味着如果您拥有多个模型,例如使用两个持久存储(但不仅如此),则在某些情况下您不能添加一个数据模型的新版本,而其他模型仍保持其当前版本。

它已提交给 Apple 并标记为重复。我不知道这是否已在 iOS6 中修复。

于 2012-06-21T06:37:53.467 回答