Clé*_*gip 10 core-data nspersistentcontainer swiftui
当我使用我的应用程序时,有时会出现一个错误,它似乎是随机的(或者我没有弄清楚确切的时间......),然后我的所有列表都是空的(就像 CoreData 中没有任何内容一样)。但是如果我关闭我的应用程序并重新打开它,列表就会出现没有任何问题......
我搜索了关于这个问题的堆栈溢出,但对我来说什么都不清楚......
错误 :
CoreData: warning: 'CDDetail' (0x2815e8790) from NSManagedObjectModel (0x2841bb8e0) claims 'CDDetail'.
2020-11-13 19:16:48.329773+0100 OrientationEPS[33705:3479327] [error] error: +[CDDetail entity] Failed to find a unique match for an NSEntityDescription to a managed object subclass
CoreData: error: +[CDDetail entity] Failed to find a unique match for an NSEntityDescription to a managed object subclass
Run Code Online (Sandbox Code Playgroud)
加载持久容器:
class OriEPS {
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "OrientationEPS")
container.loadPersistentStores { description, error in
if let error = error {
fatalError("Unable to load persistent stores: \(error)")
}
}
return container
}()
var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
Run Code Online (Sandbox Code Playgroud)
这是我获取结果的函数:
private func fetchCDDetail(withId detailId:UUID) -> CDDetail? {
let fetchRequest = NSFetchRequest<CDDetail>(entityName: "CDDetail")
fetchRequest.predicate = NSPredicate(format: "id == %@", detailId as CVarArg)
fetchRequest.fetchLimit = 1
let fetchResult:[CDDetail]? = try? context.fetch(fetchRequest)
return fetchResult?.first
}
Run Code Online (Sandbox Code Playgroud)
2个问题:我应该如何解决这个错误?0x2815e8790 是什么意思?
编辑 1: 我找不到任何其他类调用 CDDetail
经过
您多次加载模型 - 这就是这些错误的原因。可能的解决方案是使容器静态。
使用 Xcode 12.1 / iOS 14.1 测试 - 没有错误:
class OriEPS {
private static var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "CDOriEPS")
container.loadPersistentStores { description, error in
if let error = error {
fatalError("Unable to load persistent stores: \(error)")
}
}
return container
}()
var context: NSManagedObjectContext {
return Self.persistentContainer.viewContext
}
// ... other code
Run Code Online (Sandbox Code Playgroud)
注意:其他可能的方法是OriEPS在您创建它的任何地方共享和使用相同的实例,但我没有深入研究您的解决方案,因此供您考虑。
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |