我在stackoverflow中尝试了很多解决方案但是我找不到有效的解决方案。我有一个核心数据模型,有两个实体:客户端和目标。两者都由NSManagedObject
子类包装。
客户端具有一些属性和称为目标的一对多关系。
Destination有一个名为default_dest的属性,它由NSNumber
和一个名为client的反向关系包装。
我有一个UITableViewController
,我正在使用以下fetchedController
属性。请求很好。我能够检索存储在SQLite中的客户端。
if (fetchedResultsController)
return fetchedResultsController;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Client" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"code" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
fetchedResultsController.delegate = self;
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return fetchedResultsController;
我会再迈出一步。我现在将为每个客户端过滤从先前请求(包含在目标NSSet
中)中检索的目标。特别是,只有在其default_dest值为1时才能添加目标。
要修复此规范,我尝试添加NSPredicate
,如下所示:
NSPredicate* predicate = [NSpredicate predicateWithFormat:@"ANY destinations.default_dest == %@", [NSNumber numberWithInt:1]];
然后我在fetchRequest中将其设置为:
[fetchRequest setPredicate:predicate];
每次运行请求时,它都会返回“to-many-relationship fault destinations ...”。这是什么意思?
我读过iphone-core-data-relationship-fault,但我不明白它是什么意思。
所以,我的问题是:是否有可能达到类似的目标?如果是的话,你有什么建议吗?
备注
显然我可以迭代目标集,但我不知道是否可能是一个昂贵的迭代以及有多少记录。
答案 0 :(得分:3)
对于那些对此感兴趣的人。
您需要对您的提取请求说明使用
预取关系- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys
例如:
[fetchRequest setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects: @"destinations", nil]];
以这种方式,Core Data预取您指定的关系并且不会触发故障。
此外,您可以通过以下方式限制获取请求的结果数量:
- (void)setFetchLimit:(NSUInteger)limit
希望它有所帮助。
答案 1 :(得分:-1)
这是在fetch中检索特定值的另一种方法。也许这可以提供帮助(在文档中查找链接名称):