【问题标题】:How to Fetch Records from CloudKit Not in My Local Cache如何从不在我的本地缓存中的 CloudKit 获取记录
【发布时间】:2018-10-27 03:44:20
【问题描述】:

我有一个使用 CloudKit 进行同步的应用程序,并且我维护了一个本地记录缓存。我遇到了一个我无法弄清楚的同步场景。

我正在使用公共数据库,当我的应用程序打开时,我希望能够获取我的应用程序在关闭时丢失的所有更新记录,或者在一个设备上该应用程序刚刚安装。

我可以通过创建NSPredicate 来比较modificationDate 来获取更新的记录,如下所示:

let predicate = NSPredicate(format: "modificationDate > %@", syncTimestamp as CVarArg) 
let query = CKQuery(recordType: recordType, predicate: predicate)

但我不知道的部分是如何仅获取已添加到 CloudKit 服务器或从中删除的记录

有人知道怎么做吗?我知道 Apple 在私有数据库中为此提供了一种方法,但我在这里使用的是公共数据库。

到目前为止,我唯一能想到的就是查询某个recordType所有记录,收集他们所有的recordNames 并与我的本地缓存进行比较。但最好有更聪明的方法,而不仅仅是提取大量数据并比较大量 recordNames 数组。

【问题讨论】:

    标签: cloudkit


    【解决方案1】:

    CKQuerySubscription(recordType: myRecordType, predicate: predicate, options: [.firesOnRecordCreation, .firesOnRecordDeletion])public DB 上完美运行。

    这是一个代码 sn-p(保存订阅是用 RxCloudKit 完成的,但这已经超出了重点)-

    let predicate = NSPredicate(format: "TRUEPREDICATE")
    
    // the options are different from what you need, just showcasing the possibilities:
    let subscription = CKQuerySubscription(recordType: recordTypeTest, predicate: predicate, options: [.firesOnRecordCreation, .firesOnRecordUpdate, .firesOnRecordDeletion, .firesOnce])
    
    let info = CKNotificationInfo()
    info.alertLocalizationKey = "NEW_PARTY_ALERT_KEY"
    info.soundName = "NewAlert.aiff"
    info.shouldBadge = true
    
    subscription.notificationInfo = info
    
    self.publicDB.rx.save(subscription: subscription).subscribe { event in
        switch event {
        case .success(let subscription):
            print("subscription: ", subscription)
        case .error(let error):
            print("Error: ", error)
        default:
            break
        }
    }.disposed(by: self.disposeBag)

    【讨论】:

    • 感谢您的回复。我的订阅已经在使用,而且在大多数情况下,它们可以让我的应用数据保持最新。我正在尝试处理的场景是,如果应用程序没有收到最新通知(例如,如果用户在过去 5 小时内在飞机上并且错过了 20 条通知),如何获取应用程序错过的更改。我想获取数据库中发生的变化。
    • CKFetchDatabaseChangesOperation 与以前的令牌在公共数据库上不起作用?..
    • 不,据我了解,它仅在私有共享数据库中可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多