我需要帮助使用Core Data为我的应用程序设计数据库。
即:
我有2个名为Verse和Translation的Entites。 Verse与翻译表有一对多的关系。 翻译表包含不同语言的翻译,例如EN,DE,AR。
我知道如果我加载Verse表,那么相应的翻译也会延迟加载。
但我想加载每首诗歌所需的翻译。例如,只有EN。
因为如果我加载了1000个Verse并且有5个不同的翻译(DE,EN,TR,AR,FR),那么我有大量的数据我想避免>> 1000x5 = 5000.
我不想每次都加载我不需要的翻译。只有选定的翻译。
感谢您的任何建议。
此致
答案 0 :(得分:0)
核心数据执行称为错误的操作,它应该只加载您实际要求的数据。它可能会为所有这些对象加载一些元数据,但在您提出要求之前,它实际上不会加载转换。如果你想了解更多,我会建议更多地考虑错误,因为它似乎相当复杂。至少故障的其余部分似乎很复杂。
答案 1 :(得分:0)
我找到了一个正是我想要的解决方案。我测试过,它只返回所需的翻译。
- (NSArray *) loadAllVersesByLanguage
{
NSManagedObjectContext *_managedObjectContext = [self managedObjectContext];
NSArray *fetchedObjects;
NSString *turkish = @"TR";//should be parameterized
NSString *arabic = @"AR";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"languageCode==%@ OR languageCode==%@",turkish,arabic];
NSFetchRequest *fetch = [[NSFetchRequest alloc] initWithEntityName:@"Verse"];
NSError * error = nil;
fetchedObjects = [_managedObjectContext executeFetchRequest:fetch error:&error];
if(fetchedObjects != nil && fetchedObjects.count > 0 ){
for(Verse *verse in fetchedObjects){
NSSet *verseSet = [verse.translations filteredSetUsingPredicate:pred];
[verse.translations setSet:verseSet];
}
return fetchedObjects;
}else{
return nil;
}
return nil;
}