Ошибка доступа к полям записи в CKQueryNotification
Когда я получаю доступ к 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.
CLLocation не декодируется при создании CKNotification - это мое лучшее предположение.
Одним из возможных обходных путей является непосредственная обработка userInfo, но у меня возникли проблемы с обработкой CKReference. Похоже, что обработчики протокола CKRecordValue должны лучше обрабатываться при создании CKNotification.
ОБНОВЛЕНИЕ Закрыто как дубликат 24643471. Это все еще открыто в это время...