我是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
希望我一直很清楚;)
谢谢你们。
答案 0 :(得分:1)
我建议使用NSLocale
API来涵盖大部分逻辑。这将大大简化您的数据结构,并将复杂性放在它所属的位置 - 以及Apple可以为您做繁重的工作。
模型就像这样简单:实体Country
带有字符串属性countryCode
,这是Apple用来标识每个国家/地区的字符串。这些是像
en_US
fr_BE
nl_BE
nl_NL
fr_FR
如果您不希望具有不同语言区域的同一国家/地区的重复条目,您可以将它们拆分为Country
和Language
并自行构建标识符。
您可以使用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,请忘记索引。