iPhone Core Data: Поддающиеся преобразованию Атрибуты должны Преобразовать только к Данным?

Я использовал поддающиеся преобразованию атрибуты в базовых данных для преобразования сложных объектов как изображения и цвета в необработанные данные. Я взял это...

Идея позади поддающихся преобразованию атрибутов состоит в том, что Вы получаете доступ к атрибуту как к нестандартному типу, но негласно Базовые Данные используют экземпляр NSValueTransformer для преобразования атрибута в и от экземпляра NSData. Базовые Данные затем хранят экземпляр данных к персистентному хранилищу.

... означать, что Вы могли только преобразовать вещи в и от данных и не одного из других типов атрибутов, таких как строки.

Мне просто пришло в голову, что это не могло бы иметь место. Документация могла бы просто говорить о наиболее распространенном случае. IIRC, в привязке Какао, преобразования могут быть в основном произвольными. Возможно преобразовать, скажем, NSURL к NSString для дисплея и затем инвертировать его.

Прежде чем я буду напрасно тратить время, экспериментируя и возможно получая запутывающий результат, я задался вопросом, знал ли кто-то наверняка, если преобразование только к и от данных только.

6
задан TechZen 2 February 2010 в 22:33
поделиться

1 ответ

Верно. Вы должны преобразовать свой атрибут в объект NSData . Вам нужно будет сериализовать NSURL в NSData - и преобразователь NSKeyedUnarchiveFromDataTransformerName по умолчанию сделает это за вас.

Другой подход, который я использую для URL-адресов, заключается в поддержании двух параллельных свойств. Одно временное свойство неопределенного типа для URL-адреса и второе постоянное свойство строкового типа для резервного хранилища. Я лениво создаю URL-адрес из строки при первом запросе и обновляю свойство строки при изменении URL-адреса.

Невозможно принудительно применить это, но вы действительно не хотите использовать свойство string извне класса вашей сущности. Обычно я делаю определение @property для строкового атрибута закрытым, чтобы напоминать себе не использовать его.

4
ответ дан 17 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: