2011-09-24 74 views
1

我有什么似乎是OS X 10.7.1中的核心数据的错误。核心NSPersistenceFrameworkVersions 251和358之间的数据迁移失败

我的数据存储(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为d错误atabase at blah。 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的转换将突破出现。只有增加一个会导致它破裂的实体。

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

+1

我一直在使用iOS 5核心数据测试版遇到类似问题。我已经能够通过删除该项目并重新创建它来解决此问题,但无法保存所有数据。 – Jason

+0

@Jason - 您是否找到了解决方案 - 丢失数据对我来说不是一个真正的选择! :) – deanWombourne

+1

我真的黑了核心数据,所以如果表没有列,我通过直接SQLite操作手动添加它。它不漂亮,但它完美的作品。 – Jason

回答

0

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

+0

请展开一些示例,演示,文档链接。 – QED

0

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

类型“.headers”在表头的

查找表(.tables命令)的实体对象

哪里Z_1REFERENCEDSETOFOBJECTS是你的表的名称之间的引用。

select * from Z_1REFERENCEDSETOFOBJECTS limit 2 

查找表头的名称;然后对具有REFLEXIVE列的表执行以下操作:

ALTER TABLE Z_1REFERENCEDSETOFOBJECTS ADD FOK_REFLEXIVE integer 

将其推回。