Core data 使用NSPredicate剥离coredata上的任何关系

Core data 使用NSPredicate剥离coredata上的任何关系,core-data,one-to-many,nspredicate,Core Data,One To Many,Nspredicate,我有一个包含32种语言的coredata表。每种语言都与翻译有一对多的关系,其中包含关联语言的32种翻译 例如,英语将是: Language.code = @"EN"; //english translation Language.Translation.code = @"EN"; Language.Translation.text = @"english"; //italian translation Language.Translation.code = @"IT"; Language.Tr

我有一个包含32种语言的coredata表。每种语言都与翻译有一对多的关系,其中包含关联语言的32种翻译

例如,英语将是:

Language.code = @"EN";
//english translation
Language.Translation.code = @"EN";
Language.Translation.text = @"english";
//italian translation
Language.Translation.code = @"IT";
Language.Translation.text = @"inglese";
...
最终结果将是:

Language.code = @"FR";
//english translation
Language.Translation.code = @"EN";
Language.Translation.text = @"french";
//italian translation
Language.Translation.code = @"IT";
Language.Translation.text = @"francese";
...
以此类推,形成32x32的矩阵

我通过我的应用程序使用它,但在某个时候,我需要用每种语言显示一个表视图,比如说成语(英语、法语、意大利语、西班牙语、,日本人, ...). 为此,我使用了通常的NSFetchRequest,然后在tableview CellForRowatineXpath上运行NSPredicate,如下所示:

@"Language.code = Language.Translation.code"
NSPredicate *p=[NSPredicate predicateWithFormat:@"code==%@ AND langauge.text==%@",codeForTranslation,languageCode];
结果是相当浪费内存,所以我想知道是否有一种方法可以去除我在执行nsfetch请求时不使用的关系中的31个翻译。 我试过这样的方式:

@"ANY LangTranslations.translationCode = code"
但这不是脱衣,只是检查!
有更好的方法吗?

听起来您有这样的数据模型:

Language{
    code:string
    translations<-->>Translation.language
}

Translation{
    code:string
    text:string
    language<<-->Language.translations
}
…这将为您提供英语
语言
对象。然后您只需向
语言
询问相应的
翻译
对象:

NSPredicate *p=[NSPredicate predicateWithFormat:@"code=%@",languageCode];
Translation *t=[[aLanguageObj.translations filteredSetUsingPredicate:p] anyObject];
如果您必须经常这样做,并且有用于
Language
Translation
的NSManagedObject子类,您可以在
Language
类上的方法中扭曲前面的代码,该方法将为您处理此问题:

-(Translation *) translationForCode:(NSString *) languageCode; 
…并像这样使用它:

cell.textLabel.text=[[aLanguageObj translationForCode:languageCode].text];
如果您想要一个与特定的
语言
对象相关的
翻译
对象,那么您可以在
翻译
实体上运行一个具有如下谓词的获取:

@"Language.code = Language.Translation.code"
NSPredicate *p=[NSPredicate predicateWithFormat:@"code==%@ AND langauge.text==%@",codeForTranslation,languageCode];

这就是我正在做的,但我想知道这是否是正确的方法。一旦我有了我的语言,是时候展示它了,我需要运行一个谓词来找到正确的翻译,而我已经知道了。基本上,我想检索每个语言对象,它有32个翻译中只有一个翻译。好的,我认为核心数据会修剪它e关系。那就没问题了。核心数据永远不会限制实际的关系。核心数据的整个要点是维护对象图。当你拔出实体时,你会自动连接到它的所有关系。这是通过设计实现的。