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