在我的应用程序中,我有可以存储一些可选数据的对象.有两种类型的此类对象 - 例如,它们应该是唯一的,并且不需要是唯一的.
那些独特的属性还有额外的属性 - uuid - 通过它来检查唯一性.
调用非唯一,例如StoreObject和唯一的UniqueStoreObject.除了那个uuid属性,它们完全相同.
因此,StoreObject是没有父实体的实体.UniqueStoreObject是父实体设置为StoreObject的实体.正如我所说 - 两个实体描述的对象可以在一个后端同时满足.
但是,如果我尝试保存NSManagedContext,其中我有StoreObject对象,我从Core Data获取保存错误日志消息 -
CoreData: error: (1) I/O error for database at *path to base*/MapStorageTest.sqlite. SQLite error code:1, 'near "WHERE": syntax error'
Core Data: error: -executeRequest: encountered exception = I/O error for database at *path to base*/MapStorageTest.sqlite. SQLite error code:1, 'near "WHERE": syntax error' with userInfo = {
NSFilePath = "*path to base*/MapStorageTest.sqlite";
NSSQLiteErrorDomain = 1;
}
Run Code Online (Sandbox Code Playgroud)
为了使陌生人,这种行为不稳定.如果它出现一次 - 它将出现在下一次应用程序启动时.但是,如果我,例如,删除uniquing字段,或其他一些Entity(这里没有提到两个),或重新创建其中一个实体(删除它并在Xcode托管模型工具中重新编写),它就会消失.
无法找到与字段的可选性或托管对象工具中的唯一约束无关的内容.我只能捕获一件事 - 这个StoreObject实体必须具有子实体,并在保存之前直接在上下文中实例化.
当我为没有属性的非唯一商店创建单独的实体并且是StoreObject实体的子代时 - 问题就消失了
更新 …