Как представить локализованный строковый тип в Core Data? - PullRequest
6 голосов
/ 04 апреля 2011

Я новичок в Core Data и борюсь с некоторыми из них концептуально (скажем, относительно SQL, который я понимаю).

Я пытаюсь построить модель, которая для простоты выглядит следующим образом:

"Category" entity, which has a name, and a relationship to-many Products
"Product" entity, which has a name

Я хочу, чтобы эти name s (строка) в обеих сущностях сохраняли локализованные варианты.Это подразумевает другое соединение.Существует небольшое количество возможных локализаций.Я знаю, что могу поместить каждую локализацию в качестве отдельного атрибута («name_en», «name_de» и т. Д.), Но это не масштабируется, и я хочу понять «правильный» способ достижения этого.

Моя интуиция говорит мне, что я хочу еще две сущности здесь: Локализационную (которая просто содержит набор возможных локализаций) и некую Локализованную строку, связанную с Локализацией.Но XCode предупреждает меня о том, что не установлены обратные отношения и т. Д.

Может ли кто-нибудь, кто глубоко увлекается дизайном модели Core Data, помочь новичку понять, как решить эту проблему?Следующей проблемой будет создание странного многоядерного пользовательского интерфейса, который позволит вам задать имя для каждой доступной локализации, но это будет другой набор исследований. :))

1 Ответ

14 голосов
/ 04 апреля 2011

Я не знаю, квалифицируюсь ли я как кто-то, кто получает базовые данные, но я использовал что-то подобное в прошлом: enter image description here

name в Something - английское имя.Так что мне не нужно искать связь на устройствах на английском языке (которые покрывают 70% устройств для моего приложения).
И есть геттер под названием localizedName в подклассе Something, который либо возвращает имя, либострока для текущего используемого языкового кода.

Когда я сделал это, я подумал, что могу сохранить локализованную строку в свойстве name, потому что языки обычно не меняются на устройствах, которые не используются разработчиками.Но в конце концов я решил против этого, потому что это не было проблемой производительности.

Другой вариант, который я подумал, я мог бы использовать для борьбы с несуществующими проблемами производительности: enter image description here

currentLanguageString в основном указывает на локализованную строку текущего языка.Он меняется каждый раз, когда меняется язык (в 99,9% случаев это происходит один раз при первом запуске приложения).


если у вас есть более одной строки в сущности Something, я бы сделал LocalizedString абстрактный родительский класс подклассов, специально созданный для строки, которую вы хотите локализовать.
Вы должныиспользуйте такие странные конструкции, потому что вы не можете создать отношения более чем с одной сущностью.

enter image description here


Или, если вы знаете, что делаете, игнорируйте предупреждение "нет обратной связи"

enter image description here

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

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