CKQuerySubscription:订阅失败

Posted

技术标签:

【中文标题】CKQuerySubscription:订阅失败【英文标题】:CKQuerySubscription: Failing to Make Subscription 【发布时间】: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。我实际上对 ma​​cOS 应用程序做了同样的事情。它有订阅。此外,大约一周前,我删除了一个订阅类型,看看会发生什么。我真的不知道订阅 ID 是干什么用的。

那么我在订阅时做错了什么?谢谢。

【问题讨论】:

如消息所示,您需要在保存之前设置subscriptionnotificationInfo 属性。 @rmaddy 谢谢。这就对了。如果你把它作为解决方案放在那里,我会接受它。 顺便说一下,你可以用NSPredicate(value: true)代替NSPredicate(format: "TRUEPREDICATE")。它看起来更好一些。 :) 【参考方案1】:

CKQuerySubscription 扩展 CKSubscription。在保存订阅之前需要设置的属性之一是notificationInfo。该消息指出此属性为nil,应设置为有用的值。

【讨论】:

【参考方案2】:

CKQuerySubscriptions 有一个属性 notificationInfo,你需要做的如下:

let notification = CKSubscription.NotificationInfo()
notification.alertBody = "You have a new message"
notification.shouldSendContentAvailable = true

newSubscription.notificationInfo = notification

【讨论】:

以上是关于CKQuerySubscription:订阅失败的主要内容,如果未能解决你的问题,请参考以下文章

立即收取订阅更改费用

在 sharedDB cloudkit 中订阅记录更改

AppDelegate 永远不会为 CKQuerySubscription 调用它的 didReceiveRemoteNotification

通过管道失败将结构写入孩子

你好,请问华为荣耀七怎么安装busybox,手机已经root并且授权,但安装失

从标准输入复制 CSV 文件会引发“列缺失数据”