标签: nspersistentcontainer

无法找到 NSEntityDescription CoreData 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 { …
Run Code Online (Sandbox Code Playgroud)

core-data nspersistentcontainer swiftui

10
推荐指数
1
解决办法
1929
查看次数

ViewContext没有从newBackgroundContext()接收更新

堆栈溢出中已经有一个类似的问题,但是对我来说不起作用。

我的应用程序中有一个用例,其中我必须观察数据库的更改以执行某些操作。为了接收更新,我订阅了 NSManagedObjectContextObjectsDidChange通知(针对ViewContext),并且我也将其打开automaticallyMergesChangesFromParent

但是,如果我updatedelete某个对象在其他上下文上(使用newBackgroundContext()),则我不会收到对象发生更改通知,但它对于inserting新对象而言效果很好。

有人可以指导我为什么它仅对插入有效,即使启用后也不对更新和删除有效automaticallyMergesChangesFromParent吗?如果是实际行为,是否还有其他方法可以解决我的用例?

的文档(在中NSManagedObjectContext.h.automaticallyMergesChangesFromParent说:

上下文是否自动合并保存到其协调者或父上下文的更改。不支持将上下文固定到非当前查询生成时将此属性设置为YES。

我尝试了什么

  • 我通过测试是否已在视图上下文中注册更新/删除的对象进行调试。是的,那些已经注册。
  • 我使用NSFetchResultController它的正常工作测试了同一件事,但不幸的是,NSFetchResultController由于使用自定义视图来表示数据,因此无法使用
  • 另外,我尝试创建一个新的privateQueueConcurrencyType上下文并将其设置viewContext为父级,并且令人惊讶地开始工作,因此问题仅在使用时出现,newBackgroundContext()但根据文档,它应该正常工作,因为两者都使用相同NSPersistentStoreCoordinator

提前致谢!

core-data nsmanagedobject nsmanagedobjectcontext ios nspersistentcontainer

8
推荐指数
1
解决办法
279
查看次数

如何将Core Data的数据迁移到App Group的数据

我刚刚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 …
Run Code Online (Sandbox Code Playgroud)

migration core-data swift ios-app-group nspersistentcontainer

5
推荐指数
0
解决办法
1673
查看次数