Iphone 核心数据生成空SQLite数据库
我有一个数据库,我已经在我的项目中使用了好几个版本。我最初使用核心数据构建数据库,提取生成的SQLite文件,用我的数据填充,然后将生成的SQLite文件添加到我的项目中。在使用轻量级迁移对数据库结构进行更改的几次迭代中,这都是行之有效的。然而,在我最后一次尝试时,核心数据突然开始抱怨哈希不匹配 在无法解决问题后,我决定从我的项目中删除SQLite文件,清理构建并删除应用程序数据(目的是让核心数据为我初始化一个新的SQLite文件)。现在核心数据甚至不会初始化数据库,并且生成的SQLite文件是空的(没有表)。当我试图运行代码时,它会崩溃,出现Iphone 核心数据生成空SQLite数据库,iphone,sqlite,core-data,Iphone,Sqlite,Core Data,我有一个数据库,我已经在我的项目中使用了好几个版本。我最初使用核心数据构建数据库,提取生成的SQLite文件,用我的数据填充,然后将生成的SQLite文件添加到我的项目中。在使用轻量级迁移对数据库结构进行更改的几次迭代中,这都是行之有效的。然而,在我最后一次尝试时,核心数据突然开始抱怨哈希不匹配 在无法解决问题后,我决定从我的项目中删除SQLite文件,清理构建并删除应用程序数据(目的是让核心数据为我初始化一个新的SQLite文件)。现在核心数据甚至不会初始化数据库,并且生成的SQLite文件是
executeFetchRequest:error:提取请求必须有一个实体。
任何我可能出错的想法?不支持直接填充SQLite存储文件。苹果不会记录sqlite存储模式,并在没有警告或通知的情况下对其进行更改。如果您直接访问核心数据之外的sqlite存储文件,那么在操作系统和SDK更新过程中,存储可能会在某个时候失败 错误
提取请求必须有一个实体
是由于将nil
值分配给提取请求引起的,通常这是由以下行引起的:
NSEntityDescription *alphaEntity=[NSEntityDescription entityForName:@"Alpha" inManagedObjectContext:aManagedObjectContext];
。。。返回nil
,因为给定上下文加载的任何托管对象模型中都不存在具有给定名称的实体
最常见的原因是简单的输入错误,例如,当实际实体名称为@“Aleph”时,给出@“Alpha”,但也可能是由于未能加载正确的或任何托管对象模型造成的
在提取请求中使用nil实体时:
[aFetchRequest setEntity:alphaEntity];
。。。你得到了错误
您可以通过以下方式直接从上下文访问模型:
[[aMangedObjectContext persistentStoreCoordinator]managedObjectModel]
反过来,提供了各种方法,您可以使用这些方法来查询活动模型,例如,entitiesByName
将返回一个字典,其键是模型已知的所有实体名称的名称
直接访问模型可以告诉您发生了什么。要么你有输入错误,要么你因为某种原因没有加载模型 听起来您还使模型丢失了,核心数据找不到您要查找的实体。模型是在xcdatamodel文件中定义的,不是吗?我可以破坏那里的模型吗?你确定模型正在编译到你的项目中吗?一旦你的应用程序构建完成,它的资源区域中应该有一个匹配的文件。如果你能显示配置核心数据堆栈的代码,可能会有所帮助。