如何从共享数据库订阅更改?

时间:2017-08-16 09:46:49

标签: ios swift cloudkit

当我创建订阅时:

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

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

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

它仍然没有出现在我的cloudkit仪表板中。为什么呢?

enter image description here

对于私人数据库,显示......

enter image description here

我注册后,我需要知道哪些记录已经改变,以及改变了什么类型。

2 个答案:

答案 0 :(得分:3)

您必须使用Territory

创建自定义区域以保存CKDatabaseSubscription记录类型的位置
  

请注意,共享中不支持CKQuerySubscription   数据库和CKDatabaseSubscription目前仅跟踪更改   来自私人和共享数据库中的自定义区域。

Technical Q&A QA1917

的更多信息

答案 1 :(得分:0)

Dunno(如果您曾经想过),已经有一年了,但是:

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")
        }

    }

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