在CKQueryNotification

时间:2016-05-12 03:05:34

标签: swift cloudkit cknotification

当我访问订阅返回的recordFields上的CKQueryNotification时,出现此错误:

  

无法转换类型' __ NSCFDictionary'的值(0x1009f0630)到' CKRecordValue' (0x1009fc050)。

我像这样处理通知:

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

似乎工作正常,我得到CKQueryNotification

通知recordFields打印出来:

<CKQueryNotification: 0x156ef2bf0; notificationType=1, notificationID=<CKNotificationID: 0x156ef41e0; UUID=ba82325d-ab9e-4805-bb26-994a1122900b>, containerIdentifier=iCloud.com.skyvalleystudio.RaceTiming, subscriptionID=Marks for 06597454-4EAD-434E-BC03-CE51D987C79F, queryNotificationReason=1, recordFields={
    location =     {
        altitude = 0;
        course = "-1";
        horizontalAccuracy = 0;
        latitude = "37.33296424";
        longitude = "-122.03937369";
        speed = "-1";
        timestamp = "484712160.263403";
        verticalAccuracy = "-1";
    };
    timeStamp = 484712160;
    user = "_2031e89e9ade8345c7d4248f3ec3a2e6";
}, recordID=<CKRecordID: 0x156ef1670; 568D257C-E849-4492-A810-CB7076FC5A22:(_defaultZone:__defaultOwner__)>, isPublicDatabase=1>

所以看起来像recordFields字典在那里并填充。 我尝试访问是这样的:

let timestamp = notification.recordFields!["timeStamp"] as? NSDate

然后我收到错误。

更新 我提交了一份Apple错误报告26251611。

在CKNotification创建中没有解码CLLocation是我最好的猜测。

一种可能的解决方法是直接处理userInfo,但是我在处理CKReference时遇到了问题。在创建CKNotification时,似乎应该更好地处理CKRecordValue协议采用者。

更新 已关闭为24643471的副本。此时它仍处于打开状态......

0 个答案:

没有答案