【发布时间】:2018-09-05 04:25:22
【问题描述】:
我正在使用 CloudKit 开发一个 iOS 应用程序。我正在尝试订阅。
import CloudKit
class HomeViewController: UIViewController {
override func viewDidLoad() {
registerSubscription()
}
func registerSubscription() {
let cloudContainer = CKContainer(identifier: "iCloud.com.xxx.XXXXX")
let privateDB = cloudContainer.privateCloudDatabase
let predicate = NSPredicate(format: "TRUEPREDICATE") // TRUEPREDICATE: all records of the specified type match the predicate
let subscription = CKQuerySubscription(recordType: "PrivateRecords", predicate: predicate, options: .firesOnRecordCreation)
privateDB.save(subscription, completionHandler: ({returnRecord, error in
if let err = error {
print("Subscription has failed: \(err.localizedDescription)")
} else {
print("Subscription set up successfully")
print("Subscription ID: \(subscription.subscriptionID)")
}
}))
}
}
它会一直出错。错误说明如下。
使用 nil notificationInfo 订阅:CKQuerySubscription: 0x7fd7bfca7ec0; ;查询订阅:recordType=PrivateRecords, predicate=TRUEPREDICATE, subscriptionOptions=1, subscriptionID=728863F8-3852-4A12-B5C6-F65EC945207A, zoneID=(null)
我可以根据订阅 ID 删除订阅。但每次我运行这个应用程序时,它都会给我一个不同的 ID。我实际上对 macOS 应用程序做了同样的事情。它有订阅。此外,大约一周前,我删除了一个订阅类型,看看会发生什么。我真的不知道订阅 ID 是干什么用的。
那么我在订阅时做错了什么?谢谢。
【问题讨论】:
-
如消息所示,您需要在保存之前设置
subscription的notificationInfo属性。 -
@rmaddy 谢谢。这就对了。如果你把它作为解决方案放在那里,我会接受它。
-
顺便说一下,你可以用
NSPredicate(value: true)代替NSPredicate(format: "TRUEPREDICATE")。它看起来更好一些。 :)