gpt4 book ai didi

ios - CloudKit 的订阅不起作用

转载 作者:行者123 更新时间:2023-11-30 13:20:25 25 4
gpt4 key购买 nike

每当用户在我的应用程序中创建新事件时,我都会尝试发送通知。我可以成功设置通知,因为我可以在我的云套件仪表板中看到它,但是当有人创建事件时,什么也没有发生...

事情是这样的:在 ViewController1 中,用户选择事件的名称和参与者,而在 ViewController2 中,他继续选择一些其他内容。我想说的是,我不需要在我的应用程序中上传任何视觉细节(当通知到达时),我只希望当通知显示时,用户直接转到 ViewController2。这是我的代码:

应用程序代理:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)

application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()

return true
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {

let cloudKitNotification = CKNotification(fromRemoteNotificationDictionary: userInfo as! [String : NSObject])

if cloudKitNotification.notificationType == CKNotificationType.Query {


NSNotificationCenter.defaultCenter().postNotificationName("notinoti", object: nil)

}
}

ViewController1:

func setupCloudKitSubscription() {

let userDefaults = NSUserDefaults.standardUserDefaults()

if userDefaults.boolForKey("subscribed") == false {

let predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)
let subscription = CKSubscription(recordType: "Event", predicate: predicate, options: CKSubscriptionOptions.FiresOnRecordCreation)

let notificationInfo = CKNotificationInfo()
notificationInfo.alertLocalizationKey = "New event"
notificationInfo.shouldBadge = true
notificationInfo.desiredKeys = ["name"]

subscription.notificationInfo = notificationInfo

let publicData = CKContainer.defaultContainer().publicCloudDatabase
publicData.saveSubscription(subscription, completionHandler: { (subscription, error) in

if error != nil {
print(error?.localizedDescription)
} else {
userDefaults.setBool(true, forKey: "subscribed")
userDefaults.synchronize()
}
})
}
}

ViewController2:

var currentRecord: CKRecord?

override func viewDidLoad() {
super.viewDidLoad()

dispatch_async(dispatch_get_main_queue(), { () -> Void in
NSNotificationCenter.defaultCenter().addObserver(self , selector: Selector("fetchRecord"), name: "notinoti", object: nil)
})
}

func fetchRecord(recordID: CKRecordID) -> Void {

let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase

publicDatabase.fetchRecordWithID(recordID, completionHandler: ({record, error in
if let err = error {
dispatch_async(dispatch_get_main_queue()) {
print(err.localizedDescription)
}
} else {
dispatch_async(dispatch_get_main_queue()) {
self.currentRecord = record
//Now do something with the data
}
}
}))
}

最佳答案

佩德罗,

不知道它是否重要,但我的“工作”订阅行显示。我的代码中有一个 subscriptionID?

  let subID = String(NSUUID().UUIDString)
let predicateY = NSPredicate(value: true)
let subscription = CKSubscription(recordType: "Blah", predicate: predicateY, subscriptionID: subID, options: [.FiresOnRecordUpdate, .FiresOnRecordDeletion])

在闲逛了一段时间后,我模糊地记得它不起作用,此时我在云套件仪表板上重置了数据库并重新订阅,它再次起作用了。

关于ios - CloudKit 的订阅不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com