我是Core Data的新手,从概念上来说,我在其中有些挣扎(相对于我理解的SQL)。
为了简化起见,我正在尝试建立一个模型,如下所示:
"Category" entity, which has a name, and a relationship to-many Products
"Product" entity, which has a name
我希望两个实体中的那些
name
(字符串)存储本地化的变体。这意味着另一个联接。可能的本地化数量很少。我知道我可以将每个本地化设置为一个单独的属性(“name_en”,“name_de”等),但这并不能扩展,我想了解实现此目标的“正确”方法。我的直觉告诉我,我在这里还需要两个实体,一个Localizations(仅包含可能的本地化集合)和某种LocalizedString,一个与Localization相关的实体。但是Xcode警告我不要设置逆向关系等。
深入研究核心数据模型设计的人可以帮助新手了解如何思考这个问题吗?
(我的下一个问题是构建奇怪的多轴UI,该UI可让您为每个可用的本地化设置名称,但这将是另一套调查。:))
最佳答案
我不知道我是否有资格获得核心数据,但过去我曾使用过类似的方法:name
中的Something
是英文名称。因此,我不必在英语设备中搜索这种关系(英语应用程序覆盖了70%的设备)。
在localizedName
子类中有一个名为Something
的 setter/getter ,该 setter/getter 返回名称或当前使用的语言代码的字符串。
当我这样做时,我以为可以将本地化的字符串保存在name属性中,因为在开发人员不使用的设备上语言通常不经常更改。但是最后我决定反对这一点,因为那不是性能问题。
我认为可以用来对抗不存在的性能问题的另一个变体:
currentLanguageString基本上指向当前语言的本地化字符串。每次语言更改时都会更改一次(在99.9%的情况下,首次启动该应用程序时会发生一次)。
如果Something
实体中有多个字符串,则应使LocalizedString
为专门为要本地化的字符串创建的子类的抽象父类。
您必须使用这种奇怪的构造,因为您不能创建与多个实体的关系。
或者,如果您知道自己在做什么,请忽略“无逆关系”警告
但是如果您采用这种方式,则必须确保不要删除仍在使用的LocalizedString
对象。您不想以不一致的存储结尾。
关于macos - 如何在Core Data中表示本地化的字符串类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5534681/