当我访问从订阅返回的recordFields
on 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 的副本关闭。此时它仍处于打开状态......