我在没有检查“使用核心数据”的情况下构建了一个全新的xcode项目。
我实现了自己的coredata助手类来设置堆栈。
我创建了一个xcdatamodel文件,我在我的堆栈中引用它来设置核心数据。它有效。
每当我创建一个实体,然后创建它的NSManagedObject子类时,我就会遇到这个巨大的错误。
2015-08-04 11:27:03.524 Himachal[3070:715719] CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///var/mobile/Containers/Data/Application/3261B814-C246-4937-92E6-6652F6E29AAB/Library/Application%20Support/DataModel.sqlite options:{
NSInferMappingModelAutomaticallyOption = 1;
NSMigratePersistentStoresAutomaticallyOption = 1;
} ... returned error Error Domain=NSCocoaErrorDomain Code=134130 "The operation couldn’t be completed. (Cocoa error 134130.)" UserInfo=0x1710765c0 {URL=file:///var/mobile/Containers/Data/Application/3261B814-C246-4937-92E6-6652F6E29AAB/Library/Application%20Support/DataModel.sqlite, metadata={
NSPersistenceFrameworkVersion = 519;
NSStoreModelVersionHashes = {
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
""
);
NSStoreType = SQLite;
NSStoreUUID = "96440757-DC46-4B3D-BD88-88741E0B3337";
"_NSAutoVacuumLevel" = 2;
}, reason=Can't find model for source store} with userInfo dictionary {
URL = "file:///var/mobile/Containers/Data/Application/3261B814-C246-4937-92E6-6652F6E29AAB/Library/Application%20Support/DataModel.sqlite";
metadata = {
NSPersistenceFrameworkVersion = 519;
NSStoreModelVersionHashes = {
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
""
);
NSStoreType = SQLite;
NSStoreUUID = "96440757-DC46-4B3D-BD88-88741E0B3337";
"_NSAutoVacuumLevel" = 2;
};
reason = "Can't find model for source store";
}
2015-08-04 11:27:03.526 Himachal[3070:715719] CoreData: annotation: NSPersistentStoreCoordinator's current model hashes are {
Test = <1bf25eb0 2a3759be 4e86d088 de4f2a7e 350d3228 3cae66b5 1f628c4a 98f43e45>;
}
2015-08-04 11:27:03.526 Himachal[3070:715689] Core Data stack setup failed.
我尝试寻找有类似错误的人,但他们都与数据库迁移有关。必须有一件事我做错了,也许我没有正确贴上标签。有任何想法吗?
答案 0 :(得分:2)
根据docs,“您只能使用用于创建它的托管对象模型打开Core Data存储。因此更改模型将使其与存储不兼容(因此无法打开)以前创造的。“因此,如果您尝试使用一个核心数据模型运行应用程序,通过添加实体更改核心数据模型,然后再次运行应用程序,则会收到错误。
只要您的应用尚未部署到应用商店,就可以更轻松地从您的设备中删除该应用并使用全新的数据存储运行新版本以避免该问题。但是,如果您的应用程序已经出现在世界各地,您显然不希望应用程序为您的用户崩溃,因此您必须通过执行称为“数据迁移”的操作,以编程方式更改旧的核心数据模型以与新版本兼容。 “如果您当前的场景需要一个:http://www.raywenderlich.com/27657/how-to-perform-a-lightweight-core-data-migration,这里有一个很好的教程,介绍如何执行轻量级核心数据迁移。