NSPersistenceFrameworkVersions 251和358之间的核心数据迁移失败

时间:2011-09-24 00:46:18

标签: core-data osx-lion core-data-migration

我在OS X 10.7.1中看到了Core Data的错误。

我的数据存储(NSSQLiteStoreType)未自动正确迁移。

作为旁注,iOS版本的应用程序使用完全相同的Core Data模型。

- >这似乎正在发生。

直到最新版本一切正常 -

我对该型号进行了14次修改 - 型号13已经发货了很长时间而没有发生任何事故。

最近我更新了我的应用程序并添加了一个新模型,所以我在14岁(这是现在在运送应用程序中使用的版本)。

从模型13迁移到14时,iOS版本运行正常 - 所以无需担心。

因此,谈论OS X版本时,请使用NSPersistenceFrameworkVersions

NSPersistenceFrameworkVersions 251为10.6.8,NSPersistenceFrameworkVersions 358为10.7.1

如果我们使用相同的版本 - 意味着模型13版本251并迁移到模型14版本251它可以正常工作。

如果我们使用13型版本358并迁移到14型版本358,它也可以正常工作

这是有趣的地方

如果我们将模型13版本358迁移到模型14版本251,它仍然可以正常工作

但是从模型13版本251迁移到模型14版本358 工作

CoreData:错误:(1)数据库的I / O错误。 SQLite错误代码:1,'没有这样的列:FOK_REFLEXIVE'

同样,这只发生在从10.6.8(NSPersistenceFrameworkVersions 251)到10.7.1(NSPersistenceFrameworkVersions 358)时,所有其他排列都可以正常工作。

以下是传递给addPersistentStoreWithType的迁移选项。

// Allow inferred migration from the original version of the application.
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

最后一件事是,如果我们只向模型14添加属性,转换将中断。只有添加一个会导致它破坏的实体。

其他人看到这类问题。 - 提前谢谢。

2 个答案:

答案 0 :(得分:0)

澄清一下, 使用unix sqlite3工具将数据库文件的路径作为参数。 您可以通过从设备的应用程序下的组织者设备窗格中提取您的应用程序的db文件...您将获得一个包。

为表格标题输入“.headers on”

查找具有对象之间引用的实体的表(.tables命令)

Z_1REFERENCEDSETOFOBJECTS是你桌子的名字。

select * from Z_1REFERENCEDSETOFOBJECTS limit 2

找到表格标题的名称;然后对具有REFLEXIVE列的表运行以下命令:

ALTER TABLE Z_1REFERENCEDSETOFOBJECTS ADD FOK_REFLEXIVE integer

将其推回原位。

答案 1 :(得分:0)

此错误似乎已在iOS 5.1和OSX 10.7.3中修复