Macos 如何在核心数据中表示本地化字符串类型?

Macos 如何在核心数据中表示本地化字符串类型?,macos,core-data,Macos,Core Data,我对核心数据还不熟悉,并且在概念上(比如说,相对于SQL,我理解SQL)正在与一些核心数据作斗争 为了简单起见,我正在尝试构建一个模型,该模型如下所示: "Category" entity, which has a name, and a relationship to-many Products "Product" entity, which has a name 我希望这两个实体中的names(字符串)存储本地化变量。这意味着另一个连接。有少量可能的本地化。我知道我可以将每个本地化作为一个

我对核心数据还不熟悉,并且在概念上(比如说,相对于SQL,我理解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警告我不要建立反向关系等等

如果有人对核心数据模型设计有深入的研究,请帮助新手理解如何思考这个问题


(我的下一个问题是构建奇怪的多轴用户界面,让你为每个可用的本地化设置名称,但这将是另一组调查。:)

我不知道我是否符合搜索核心数据的资格,但我过去使用过类似的东西:

Something
中的
name
是英文名称。因此,我不必在英语设备中搜索关系(这涵盖了我应用程序70%的设备)。
Something
子类中有一个名为
localizedName
的getter,它返回当前使用的语言代码的名称或字符串

当我这样做的时候,我认为我可以在name属性中保存本地化字符串,因为在开发人员不使用的设备上,语言通常不会经常更改。但最后我决定不这样做,因为这不是性能问题

我认为可以使用另一种变体来解决不存在的性能问题:

currentLanguageString基本上指向当前语言的本地化字符串。每次语言改变时,它都会改变(在99.9%的情况下,这种情况在应用程序首次启动时发生一次)


如果在
Something
实体中有多个字符串,我会将
LocalizedString
作为一个抽象的父类,子类是专门为要本地化的字符串创建的。
您必须使用这种奇怪的构造,因为您无法创建与多个实体的关系


或者,如果您知道自己在做什么,请忽略“无反向关系”警告


但如果这样做,则必须确保永远不会删除仍在使用的
LocalizedString
对象。您不希望以不一致的存储结束

这些字符串是由用户输入的还是仅由应用程序使用?如果您使用核心数据作为应用程序本地化的后端,那么最好使用提供的本地化工具。否则我会倾向于同意fluchtpunkt的回答。@sosborn:由用户输入。在这种情况下,我绝对同意你的建议。(这似乎也是一个很好的学习示例,因为实体关系比我读过的CD教程更有趣。)谢谢。非常感谢您的详细回复。好东西。我最感兴趣的是你的最后一点。在SQL中,LocalizedString表可能是类似元组(stringID、languageCode、text)的,但正如您所说的,这种非反向通用存储在这里并不自然。我会按照你描述的方式来考虑。如果你有很多字符串,这会使你的数据库变得庞大。搜索也很难/很慢,但除此之外,它很好地解释了这一点。谢谢