0

当我访问从订阅返回的recordFieldson a时,我收到此错误:CKQueryNotification

无法将“__NSCFDictionary”(0x1009f0630)类型的值转换为“CKRecordValue”(0x1009fc050)。

我这样处理通知:

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

它似乎工作正常,我得到一个CKQueryNotification.

通知记录字段打印如下:

<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。

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

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

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

4

0 回答 0