Ошибка доступа к полям записи в 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. Это все еще открыто в это время...

0 ответов

Другие вопросы по тегам