相关疑难解决方法(0)

如何使用 NSPersistentCloudKitContainer 和 SwiftUI 手动获取 CloudKit 数据以更新 UI?

假设我们有一个有效的 NSPersistentCloudKitContainer 和一个名为 Item 的 CoreData 实体。假设我们想要在 iOS、iPad 和 Mac 应用程序之间同步。

我观看了有关同步 CoreData 和 CloudKit 的 WWDC 会议,并在我的 SwiftUI 应用程序中实现了基本同步。它可以工作,数据会发送到所有 3 台设备并自动同步。

但是在 Mac 上,如果不重新加载视图(以及在模拟器中(因为它们没有收到推送通知),数据就不会出现。它来了,但没有自动刷新。我还测试了模拟器到真实设备,有时它会自动同步,有时我需要重新打开应用程序才能看到更改。

我很好奇是否有一种可以与 NSPersistentCloudKitContainer 一起使用的强制获取方法。或者也许有人知道在使用 NSPersistentCloudKitContainer 和 SwiftUI 时手动重新获取数据的解决方法?

我还想在新数据开始出现时显示一个活动指示器,但不确定在代码中从哪里开始获取获取点?

我使用了 Apple 提供的这个 UIKit示例代码,并将其调整为在 SwiftUI 中工作。我还阅读了此处的所有文档。

这是我使用的persistentContainer代码:

lazy var persistentContainer: NSPersistentCloudKitContainer = {

        let container = NSPersistentCloudKitContainer(name: "AppName")

        container.persistentStoreDescriptions.first?.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)

        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {

                fatalError("Unresolved error \(error), \(error.userInfo)")
            } …
Run Code Online (Sandbox Code Playgroud)

core-data ios cloudkit swiftui nspersistentcloudkitcontainer

5
推荐指数
1
解决办法
2000
查看次数

使用CloudKit + CoreData,如何在没有SwiftUI的@FetchRequest的情况下从远程云更新更新UI?

大多数 CloudKit+CoreData 教程都使用 SwiftUI,其实现包括 @FetchRequest,它会自动检测 CoreData 获取中的更改并刷新 UI。

https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-fetchrequest-property-wrapper

如果没有 SwiftUI,我该如何实现这一目标?我希望能够控制刷新 UI 的方式,以响应检测到因 iCloud 更新而发生的 CoreData 更改。

我用它来设置 NSPersistentCloudKitContainer 并注册远程通知:

let storeDescription = NSPersistentStoreDescription()
    storeDescription.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)

    let container = NSPersistentCloudKitContainer(name: "CoreDataDemo")
    container.persistentStoreDescriptions = [storeDescription]
    
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    
    container.viewContext.automaticallyMergesChangesFromParent = true
    container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
    
    NotificationCenter.default.addObserver(self, selector: #selector(didReceiveCloudUpdate), name: .NSPersistentStoreRemoteChange, object: container.persistentStoreCoordinator)
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何以 SwiftUI 实现自动处理的方式处理 .NSPercientStoreRemoteChange 。该方法被许多不同的线程非常频繁地调用(仅在启动时就多次调用)。

core-data swift cloudkit

4
推荐指数
1
解决办法
1157
查看次数

核心数据和CloudKit同步WWWDC 2019不适用于Beta 3

我正在尝试复制有关自动将核心数据与云工具包同步的WWDC讨论的结果。

我尝试了三种方法:

  1. 制作一个新的主从视图应用程序并按照wwdc 2019演讲中的步骤进行操作,在这种情况下不会发生同步

  2. 在这种情况下,也将下载示例wwdc 2019应用程序

  3. 我制作了一个带有少量核心数据和云工具包容器的小型应用程序,在这种情况下,发生了同步,但是我必须重新启动该应用程序。我怀疑这与历史记录管理有关,因此观察到NSPersistentStoreRemoteChange通知并非一无所获。

感谢任何帮助。

synchronization core-data cloudkit

3
推荐指数
2
解决办法
417
查看次数