Как читать массивы с помощью NSPersistentCloudKitContainer (CloudKit с Core Data)?

У меня есть атрибуты [String] и [Int] в моей сущности в Core Data / type в CloudKit, где они представляют собой список строк и список Int64 соответственно. Пытаюсь синхронизировать их через NSPersistentCloudKitContainer (публичный сервер). Все остальные атрибуты синхронизируются правильно, но эти два - нет. Остальные простые - String, Date, Int64 / Int. Я тоже хочу синхронизировать их.

Оба они являются Transformable, с их соответствующим классом Custom, установленным на [String] и [Int]. Кодогенерация - Вручную / Нет, поэтому я могу создавать развернутые атрибуты для дальнейшего использования.

Когда я запускаю приложение при первом запуске, я также получаю CKRecord с их данными - я имею в виду, что я вижу в отладке их значения в информации о загруженных записях. Однако, когда я проверяю Core Data, он говорит мне nil.

Я пробовал установить как NSSecureUnarchiveFromData, так и NSSecureUnarchiveFromDataTransformerName, это не сработало.

Мне ясно, что данные массивов загружаются, я не понимаю, почему Core Data не нравятся массивы.


person Атанас Начков    schedule 07.02.2021    source источник
comment
Отвечает ли это на ваш вопрос? Как сохранить массив в CoreData?   -  person Stamenkovski    schedule 07.02.2021
comment
Частично :) Но решить удалось!   -  person Атанас Начков    schedule 08.02.2021


Ответы (1)


Ладно, удалось решить:

  1. Это должен быть не какой-либо список в CloudKit, а только байты.

  2. Остальное - это просто преобразование массивов в NSData при загрузке. Я сделал это с данными

    пусть archivedString = попробовать? NSKeyedArchiver.archivedData (withRootObject: [String], requireSecureCoding: true)

То же самое и с [Int].

person Атанас Начков    schedule 08.02.2021
comment
Не могли бы вы рассказать, как вы это решили? Я в похожей ситуации. Сущность My Core Data имеет атрибут типа [String] (трансформируемый) и сохраняется в CloudKit как тип Bytes. Когда я делаю запрос на выборку для CKRecord и пытаюсь извлечь [String] из байтов, он выдает ошибку: strings = record [CD_strings] as! [String] Как вы должны получить CKRecordValue как тип [String]? - person PointOfNilReturn; 02.06.2021
comment
Я думаю, вам пока не следует указывать его как [String] при извлечении, а как Data, а затем пытаться разархивировать его. - person Атанас Начков; 02.06.2021