我是Core Data的新手,我正在尝试创建一种缓存机制,在解析来自API的对象后,我将它们保存到数据模型中,然后再次获取它以在tableview上显示它。我正在尝试使用NSFetchedResultsController
获取它。在初始化NSFetchedResultsController
时,我遇到了这个运行时异常:
2018-12-09 15:03:20.493509+0800 [5184:148001] [error] error:
No NSEntityDescriptions in any model claim the NSManagedObject subclass
'Product' so +entity is confused. Have you loaded your
NSManagedObjectModel yet ?
CoreData: error: No NSEntityDescriptions in any model claim the
NSManagedObject subclass 'Product' so +entity is confused. Have you
loaded your NSManagedObjectModel yet ?
2018-12-09 15:03:20.493718+0800[5184:148001] [error] error: +
[Product entity] Failed to find a unique match for an
NSEntityDescription to a managed object subclass
CoreData: error: +[Product entity] Failed to find a unique match for an
NSEntityDescription to a managed object subclass
原因是什么呢?
9条答案
按热度按时间7uhlpewt1#
如果您在使用SwiftUI时遇到类似的问题,可以尝试将实体的classmodule从 *Global Pace * 更改为 Current Product Module。
转到xcdatamodeld文件并选择有问题的实体。然后在数据模型检查器中,通过单击字段右侧的箭头将Module字段从默认的 Global namespace 更改为可用值“Current Product Module”。
这使得我的应用程序编译时不会遇到错误。
uyhoqukh2#
我的经验:
实体类缺少类名上方的
@objc(Person)
行。我确实有更多的类在没有这一行的情况下工作,但只有在创建这个特定的实体时,我才得到这个错误。cbwuti443#
当我将 Core Data Model 的 Codegen 属性更改为类型 Category/Extension,为 Core Data Model 创建自定义类时,也遇到了同样的问题。
正如@dypbrg所指出的,更改以下代码段
到下面的代码段
似乎解决了这个问题。
nr9pn0ug4#
在我的例子中,我使用的是SwiftUI,在持久化存储函数返回之前使用了
NSManagedObjectContext
。然后,我使用Xcode跟踪核心数据示例项目来解决这个问题:
xiozqbni5#
对于任何在混合项目(Obj-C + Swift)中遇到这个问题的人来说。
在我的例子中,CoreData xcdatamodel是作为SPM包中的资产交付的,并在这个包中使用。使用Swift项目没有问题,但使用Hybrid项目时,我遇到了同样的问题。
解决我的问题的方法:
1.如@Sam所述,对NSManagedObjects使用@objc注解
1.对每个实体使用全局命名空间而不是当前产品模块(检查@Pomme2Poule的答案如何做到这一点)
zkure5ic6#
在我的例子中,我更改了一个实体和swift类的名称,但忘记了在xcdatamodeld中更新为新的swift类名称。
(In xcdatamodel视图,在左窗格的“CONFIGURATIONS”下,选择“Default”并确保类的名称正确。)
ha5z0ras7#
我也遇到过同样的问题,最后找到了
persistentContainer
lazy initilaize的根本原因。在AppDelegate.swift中,删除
lazy
对我来说很有效。3b6akqbq8#
对于我来说,我没有在AppDelegate中将NSPersistentContainer命名为与我创建的xcdatamodelId相同的名称。
kupeojn69#
我想添加在我的情况下,这个错误发生后,我已将我的
xcdatamodeld
和相关文件到另一个文件夹。删除和重新创建数据模型文件为我修复了它。如果在移动某些文件后发生此错误,则可能是某些文件未正确移动。