CoreData:模型设计的建议

时间:2014-07-23 10:38:09

标签: ios objective-c core-data database-design model

我是Core Data的新手,我不知道如何继续做我想做的事。 实际上,我想用国家和国家代码制作一个模型。

但是:国家/地区已经本地化(目前有3种语言)。 所以,这是我的模型:

实体:国家 属性:

 - name_en (String)
 - name_nl (String)
 - name_fr (string)

现在,我想为每个国家/地区关联国家/地区代码。

示例:

 - Belgium => BE
 - United States => USA
 - France => FR

等。但它也必须使用法语和荷兰语。

我不知道如何将此国家/地区代码链接到name_en,name_nl和name_fr。

重要提示:这些国家/地区的法语,英语或荷兰语指数相同:

Belgium (en) => index 3
België (nl) => index 3
Belgique (fr) => index 3

希望我一直很清楚;)

谢谢你们。

1 个答案:

答案 0 :(得分:1)

我建议使用NSLocale API来涵盖大部分逻辑。这将大大简化您的数据结构,并将复杂性放在它所属的位置 - 以及Apple可以为您做繁重的工作。

模型就像这样简单:实体Country带有字符串属性countryCode,这是Apple用来标识每个国家/地区的字符串。这些是像

这样的字符串
en_US
fr_BE
nl_BE
nl_NL
fr_FR

如果您不希望具有不同语言区域的同一国家/地区的重复条目,您可以将它们拆分为CountryLanguage并自行构建标识符。

您可以使用Apple的API生成所有其余内容。例如,国家代码

Country *belgium; // assume localeIdentifier "fr_BE" for French
NSLocale *locale = [NSLocale localeWithLocaleIdentifier:belgium.localeIdentifier];
NSString *belgiumCountryCode = [locale objectForKey:NSLocaleCountryCode];
// --> "BE"
NSString *nameOfBelgiumInFrench = 
    [locale displayNameForKey:NSLocaleCountryCode value:belgiumCountryCode];
// --> "Belgique"
NSLocale *usLocale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
NSString nameOfBelgiumInEnglish = 
    [usLocale displayNameForKey:NSLocaleCountryCode value:belgiumCountryCode];
// --> "Belgium"

您可以将这些繁琐的方法放入托管对象子类的便捷访问器中。从理论上讲,你也可以对它们进行硬编码,但我强烈反对它。

最后一件事:如果您打算使用Core Data,请忘记索引。