0

NSPersistentCloudKitContainer を使用して Core Data モデルをセットアップしました。

struct PersistenceController {
    static let shared = PersistenceController()
    let container: NSPersistentCloudKitContainer
    init(inMemory: Bool = false) {
        container = NSPersistentCloudKitContainer(name: "LearningCloudKit")
        if inMemory {
            container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
        }
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
    }
}

これは、CoreData と CloudKit を使用して新しいプロジェクトを作成するときに Xcode が提示するほとんどの標準的なものです。

データを表示するビューは、

    @Environment(\.managedObjectContext) private var viewContext
    @FetchRequest(
        sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: false)],
        animation: .default)
    private var items: FetchedResults<Item>

デバイス間の同期はある程度機能しますが、一方のデバイスに新しいデータを入力すると、もう一方のデバイスに表示されるまでに 15 分以上かかります。わかりません。アプリを強制終了して再起動するまで届かないことがあります。また、あるデバイスでデータを入力し、強制的に閉じて他のデバイスからのデータを表示する必要がある場合もあります。

リモート通知を有効にし、CloudKit とコンテナーを有効にしました。CloudKit ダッシュボードで、変更がクラウドにかなり速くアップロードされていることを確認しました。それらはそれほど速くデバイスにダウンロードされていないようです。

これを機能させるには、他に何をしなければなりませんか? 1 つのデバイスにデータを入力すると、1 分もかからずに他のデバイスに表示されます。多分バックグラウンドサービス?

4

1 に答える 1