ios 如何订阅共享数据库中的更改?

ih99xse1  于 2023-04-22  发布在  iOS
关注(0)|答案(2)|浏览(114)

创建订阅时:

let options: CKSubscriptionOptions = [.firesOnRecordCreation, .firesOnRecordUpdate, .firesOnRecordDeletion]
let subscription = CKDatabaseSubscription(recordType: "Territory", predicate: NSPredicate(value: true), options: options)

并将其保存到共享数据库:

sharedDatabase?.save(subscription) { _, _ in }

它仍然没有出现在我的Cloudkit Jmeter 板中。为什么?

而对于专用数据库,则显示...

在我注册后,我需要知道哪些记录已经更改,以及更改的类型。

h7wcgrx3

h7wcgrx31#

您必须使用CKDatabaseSubscription创建一个 * 自定义区域 * 以保存您的Territory记录类型
请注意,共享数据库不支持CKQuerySubscription,CKDatabaseSubscription当前仅跟踪私有和共享数据库中自定义区域的更改。
更多信息Technical Q&A QA1917

ldxq2e6h

ldxq2e6h2#

不知道你有没有发现,已经一年了,但是:

func subscribeToSharedDBForRecordType(recordType:String){

        let newSubscription = CKDatabaseSubscription()
        newSubscription.recordType = recordType

        let info = CKSubscription.NotificationInfo()
        info.soundName = "default"
        info.alertBody = "Something changed the record!"
        newSubscription.notificationInfo = info

        CKContainer.default().sharedCloudDatabase.save(newSubscription) { [weak self] savedSubscription, error in

            guard let savedSubscription = savedSubscription, error == nil else {
                print("error saving subscription:\(String(describing: error))")
                return
            }

            UserDefaults.standard.set(newSubscription.subscriptionID, forKey: "someUniqueKey")
        }

    }

将为您订阅对共享数据库中给定记录类型的所有更改。接下来要做的事情是查看区域通知以确定哪个区域受到影响。我没有为我的项目这样做,所以我不知道如何做到这一点。

相关问题