为啥向核心数据实体添加双重属性会导致远距离相关实体中的属性冲突出现 NSInternalInconsistencyException?
Posted
技术标签:
【中文标题】为啥向核心数据实体添加双重属性会导致远距离相关实体中的属性冲突出现 NSInternalInconsistencyException?【英文标题】:Why Does Adding a Double Attribute to a CoreData Entity Cause NSInternalInconsistencyExceptions for Property Conflicts in Distantly Related Entities?为什么向核心数据实体添加双重属性会导致远距离相关实体中的属性冲突出现 NSInternalInconsistencyException? 【发布时间】:2020-03-04 19:23:43 【问题描述】:我们最近决定向我们的Product
CoreData 实体添加一些可选的双类型属性(名为last7
、last30
和last60
),但这会导致NSInternalInconsistencyException
:
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“实体“评论”中名为“sortKey”的属性与从父实体“ChatItem”继承的属性冲突”
Comment
是ChatItem
的子类,sortKey
是ChatItem
中声明的String属性,由Comment
继承。 Comment
在 sortKey
属性上有一个获取索引;删除它并不能解决问题。
正如您在此连接器视图屏幕截图中所见,Product
s 通过Event
实体与这两个类有切线相关;每个Product
有多个Event
s,每个Event
有多个ChatItem
s。实际上,这些ChatItem
s 中的大多数都是Comment
的子类。
将新属性标记为“瞬态”可解决崩溃问题,但不会将数据存储在 CoreData 中,这是对这些值的要求。
我们注意到在全新安装时不会出现此问题,因此我们假设它在某种程度上与迁移有关。根据对这个非常相似的 *** 问题 (Preventing a CoreData crash for upgrading users) 的公认答案,我们验证我们已启用轻量级迁移:
let options = [
NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true,
NSSQLiteAnalyzeOption: true,
NSSQLiteManualVacuumOption: true
]
store.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: self.storeURL, options: options)
我们很困惑,因为表面上导致问题的属性不是我们正在更改的实体的一部分;我们缺少什么?
【问题讨论】:
实体ChatItem
中是否有一个名为sortKey
的属性?
@andrewbuilder 是的,在ChatItem
中定义,由Comment
继承
抱歉,Alex,我的意思是问...您的模型是否在实体 Comment
中包含另一个同名属性 sortKey
。
@andrewbuilder 没有,只有ChatItem
明确定义了sortKey
@Natali 我给 Apple 留下了一个错误报告,从那以后得到了回复——他们提出的解决方案是多个步骤(我还没有尝试过),这似乎是 CoreData 本身的一个错误;长话短说 - 在未来的项目中避免核心数据继承。
【参考方案1】:
我遇到了同样的问题,只是在 ios 14 上,而不是在 iOS 15 上。
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“实体“中名为“myproperty”的属性与从父实体继承的属性冲突” ''
我能够通过删除用于迁移的源模型版本上的索引来解决问题。
注意:索引不是直接引用有问题的键“myproperty”,而是重命名为“myproperty”的键上的索引。这显然看起来像是 iOS 14 的错误。
【讨论】:
我遇到了同样的问题,还从当前模型版本中删除了索引,这似乎在模拟器中工作。但是我仍然看到很多这样的崩溃发生。你能详细说明一下你的具体步骤是什么吗?有点舍不得改以前的机型版本,好像不太对……以上是关于为啥向核心数据实体添加双重属性会导致远距离相关实体中的属性冲突出现 NSInternalInconsistencyException?的主要内容,如果未能解决你的问题,请参考以下文章