我已经更新了现有的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功能和权利,包括:
NSPersistentStoreRemoteChangeNotificationOptionKey
设置为true(感谢@Nico_Reese的回答)显然,数据正在同步,确定。只是通知无法正常工作。因此最终用户不会自动看到新的/同步的数据。
我该如何使用它?
我已经更新了现有的CoreData应用程序以使用CloudKit,以便它可以使多个设备之间的数据保持同步(对于同一iCloud帐户)。有用!数据同步就可以了。但是...
我有同样的问题。我只是发现它在TestFlight构建中可以正常工作,但是当直接用Xcode构建时,它却不能。您尝试过吗?