CoreData和CloudKit Sync正常工作,但NSPersistentStoreRemoteChange通知从不触发

问题描述 投票:1回答:1

我已经更新了现有的CoreData应用程序以使用CloudKit,以便它可以使数据跨多个设备(对于同一iCloud帐户)保持同步。

有效!数据同步就可以了。

但是主UIViewController的视图不反映新数据。要查看更改,我必须切换到其他视图,然后切换回在其refreshData()函数中具有viewWillAppear()调用的主视图。然后,它从数据存储中重新读取并显示所有数据(包括在其他设备上更新的数据。)>

UIViewController应该按照下面的NSPersistentStoreRemoteChange观察viewDidLoad()通知:

    override func viewDidLoad() {
        super.viewDidLoad()
    //  NotificationCenter.default.addObserver(self, selector: #selector(handleRemoteChange), name: .NSPersistentStoreRemoteChange, object: AppDelegate.appDelegate().persistentContainer.persistentStoreCoordinator)
        NotificationCenter.default.addObserver(self, selector: #selector(handleRemoteChange), name: .NSPersistentStoreRemoteChange, object: nil)
    }

但是处理函数永远不会被调用:

    @objc func handleRemoteChange(notification: Notification) {
        print("Handling remote change to data in Collection Controller")
        refreshData()
    }

该打印语句从不打印任何内容,并且在那里设置的断点也不会触发。

我已配置托管对象上下文,以便在创建NSPersistentCloutKitContainer之后立即根据需要合并来自父对象的更改:

    container.viewContext.automaticallyMergesChangesFromParent = true

该应用程序具有在搜索网络(和堆栈溢出)的线索后,我所知道的所有相关的iCloud功能和权利,包括:

  • “远程通知”(背景模式)
  • “” CloudKit“(iCloud)
  • 已创建容器,并选择容器的标识符为格式:iCloud.reverse.domain.app
  • 容器的persistentStoreDescription将选项NSPersistentStoreRemoteChangeNotificationOptionKey设置为true(感谢@Nico_Reese的回答)
  • 显然,数据正在同步,确定。只是通知无法正常工作。因此最终用户不会自动看到新的/同步的数据。

我该如何使用它?

我已经更新了现有的CoreData应用程序以使用CloudKit,以便它可以使多个设备之间的数据保持同步(对于同一iCloud帐户)。有用!数据同步就可以了。但是...

swift core-data push-notification notifications cloudkit
1个回答
0
投票

我有同样的问题。我只是发现它在TestFlight构建中可以正常工作,但是当直接用Xcode构建时,它却不能。您尝试过吗?

© www.soinside.com 2019 - 2024. All rights reserved.