当我使用我的应用程序时,有时会出现一个错误,它似乎是随机的(或者我没有弄清楚确切的时间......),然后我的所有列表都是空的(就像 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
加载持久容器:
class OriEPS {
lazy var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "OrientationEPS")
        container.loadPersistentStores { description, error in
            if let error = error { …堆栈溢出中已经有一个类似的问题,但是对我来说不起作用。
我的应用程序中有一个用例,其中我必须观察数据库的更改以执行某些操作。为了接收更新,我订阅了   NSManagedObjectContextObjectsDidChange通知(针对ViewContext),并且我也将其打开automaticallyMergesChangesFromParent。
但是,如果我update或delete某个对象在其他上下文上(使用newBackgroundContext()),则我不会收到对象发生更改通知,但它对于inserting新对象而言效果很好。
有人可以指导我为什么它仅对插入有效,即使启用后也不对更新和删除有效automaticallyMergesChangesFromParent吗?如果是实际行为,是否还有其他方法可以解决我的用例?
的文档(在中NSManagedObjectContext.h).automaticallyMergesChangesFromParent说:
上下文是否自动合并保存到其协调者或父上下文的更改。不支持将上下文固定到非当前查询生成时将此属性设置为YES。
我尝试了什么
NSFetchResultController它的正常工作测试了同一件事,但不幸的是,NSFetchResultController由于使用自定义视图来表示数据,因此无法使用privateQueueConcurrencyType上下文并将其设置viewContext为父级,并且令人惊讶地开始工作,因此问题仅在使用时出现,newBackgroundContext()但根据文档,它应该正常工作,因为两者都使用相同NSPersistentStoreCoordinator提前致谢!
core-data nsmanagedobject nsmanagedobjectcontext ios nspersistentcontainer
我刚刚App Groups使用此StackOverFlow 帖子添加到我的应用程序中。不幸的是,由于defaultDirectoryURL正在发生变化,我无法获取在使用应用程序组目录之前制作的任何旧数据。我知道数据仍然存在,因为当我切换回使用常规NSPersistentContainer而不是 时GroupedPersistentContainer,我可以获取数据。
如何将旧数据迁移到我正在获取应用组数据的位置?
核心数据代码:
class CoreDataManager {
    static let sharedManager = CoreDataManager()
    private init() {}
    lazy var persistentContainer: NSPersistentContainer = {
        var useCloudSync = UserDefaults.standard.bool(forKey: "useCloudSync")
        let containerToUse: NSPersistentContainer?
        if useCloudSync {
           containerToUse = NSPersistentCloudKitContainer(name: "App")
        } else {
            containerToUse = GroupedPersistentContainer(name: "App")
            let description = containerToUse!.persistentStoreDescriptions.first
            description?.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
      }
        guard let container = containerToUse, let description = container.persistentStoreDescriptions.first else {
            fatalError("Hey Listen! ###\(#function): Failed …migration core-data swift ios-app-group nspersistentcontainer