CloudKit - Хранение нескольких CKReferences в CKRecord

В моем приложении есть тип записи (UserActivity), который просто хранит изображения, которые пользователь хочет сохранить в своем профиле. Этот тип записи содержит только один атрибут - CKReference для другого типа записи (например, RecordTypeA). Это прекрасно работает... Я могу хранить и извлекать данные по ссылкам, чтобы создавать изображения и отображать их соответствующим образом на экране. Однако я только что понял, что мне нужно добавить второй атрибут к типу записи UserActivity, который будет CKReference к другому типу записи (назовите его RecordTypeB). Тип записи B - это второй тип изображения, который необходимо идентифицировать отдельно. Таким образом, каждая строка в UserActivity теперь будет иметь 1 из 2 возможных CKReferences, но не обе.

Я могу сохранить новую ссылку RecordTypeB без проблем, но в результате у меня есть пара проблем. Во-первых, когда я сохраняю его, с помощью кода или CKDashboard, запись теперь показывает заголовок как "Без имени", поскольку для атрибута RecordTypeA ничего нет. Первоначально имена записей были бы ref: follow-by-recordid. Он работает так же, как и изначально, если в записи UA есть ссылка на RecordTypeA. Так есть ли способ заставить его создать имя записи только для ссылки RecordTypeB? Возможно ли, что я должен изменить это на CKReference List теперь, когда у меня есть второй атрибут? Во-вторых, и что еще более важно, когда я получаю записи UserActivity, как я могу узнать для данной записи, содержит ли она ссылку на RecordTypeA или RecordTypeB? Есть ли способ, аналогичный методу isKindOfClass? В этом случае этот метод просто показывает, что это CKReference, а не какой тип записи является ссылкой. И, может быть, второй вопрос будет автоматически решен, если CKReference List является подходящим решением? Заранее спасибо за руководство!

1 ответ

Решение

Опыт показывает, что заголовок записи будет первым полем, которое вы создали для этого recordType. Я не нашел никакой документации по этому поводу, так что это может быть совпадением. Если вы хотите, чтобы ваш заголовок был полем RecordTypeB, воссоздайте свой recordType, а затем сначала создайте RecordTypeB. Нет другого способа повлиять на название.

Вы можете изменить его на CKReference List, но я думаю, что в вашем случае было бы легче сохранить 2 отдельных поля. Только когда вы не возражаете против того, что это за элемент, вы должны использовать список. Но в вашем случае ссылки бывают 2 разных типов.

Если вы не написали ни одно из полей, то, когда вы читаете запись и просматриваете ссылку, она должна быть равна нулю. Вы не можете спросить recordType CKReference. Но если вы создаете поле для ссылки, то вы знаете, каким оно должно быть recordType. В противном случае вам нужно создать дополнительное поле для указания, что это за recordType.

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