Я использовал поддающиеся преобразованию атрибуты в базовых данных для преобразования сложных объектов как изображения и цвета в необработанные данные. Я взял это...
Идея позади поддающихся преобразованию атрибутов состоит в том, что Вы получаете доступ к атрибуту как к нестандартному типу, но негласно Базовые Данные используют экземпляр NSValueTransformer для преобразования атрибута в и от экземпляра NSData. Базовые Данные затем хранят экземпляр данных к персистентному хранилищу.
... означать, что Вы могли только преобразовать вещи в и от данных и не одного из других типов атрибутов, таких как строки.
Мне просто пришло в голову, что это не могло бы иметь место. Документация могла бы просто говорить о наиболее распространенном случае. IIRC, в привязке Какао, преобразования могут быть в основном произвольными. Возможно преобразовать, скажем, NSURL к NSString для дисплея и затем инвертировать его.
Прежде чем я буду напрасно тратить время, экспериментируя и возможно получая запутывающий результат, я задался вопросом, знал ли кто-то наверняка, если преобразование только к и от данных только.
Верно. Вы должны преобразовать свой атрибут в объект NSData
. Вам нужно будет сериализовать NSURL
в NSData
- и преобразователь NSKeyedUnarchiveFromDataTransformerName
по умолчанию сделает это за вас.
Другой подход, который я использую для URL-адресов, заключается в поддержании двух параллельных свойств. Одно временное свойство неопределенного типа для URL-адреса и второе постоянное свойство строкового типа для резервного хранилища. Я лениво создаю URL-адрес из строки при первом запросе и обновляю свойство строки при изменении URL-адреса.
Невозможно принудительно применить это, но вы действительно не хотите использовать свойство string извне класса вашей сущности. Обычно я делаю определение @property
для строкового атрибута закрытым, чтобы напоминать себе не использовать его.