NSFetchedResultsController 和关系
Posted
技术标签:
【中文标题】NSFetchedResultsController 和关系【英文标题】:NSFetchedResultsController and Relationship 【发布时间】:2011-07-23 17:35:08 【问题描述】:这次我遇到了一个奇怪的 NSFetchedResultsController 行为。我像这样创建一个 fetchRequest:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entdesc = [NSEntityDescription entityForName:@"Exam" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entdesc];
NSPredicate *predi = [NSPredicate predicateWithFormat:@"student == %@", self.student];
[fetchRequest setPredicate:predi];
如果我使用 NSManagedObjectContext 的executeFetchRequest:error:
执行它,我会得到预期的结果。根据学生的所有考试。 (学生和考试之间是一对多的关系)
但是如果我在 NSFetchedResultsController 中使用相同的 fetchRequest,我会得到不同的结果。直到现在我还没有出去,我到底得到了什么。在我看来,结果是随机的。
你能帮帮我吗?我想用 NSFetchedResultsController 管理给定学生的考试。
桑德罗·迈耶
【问题讨论】:
[NSPredicate predicateWithFormat:@"student == %@", self.exam]
。 self.exam
是学生吗?
对不起我的错。当然必须是学生。 ;-)
【参考方案1】:
如果您手头已有Student
对象,则不必获取Exam
对象,只需向Student
对象询问其exams
关系的内容即可。无需获取,因为您已经拥有对所需的所有 Exam
对象的引用。
至于为什么 fetch 在 fetch 结果控制器之外工作,我不能肯定地说。控制器除了获取 fetch 的结果并将它们打包以在 tableview 中显示之外什么都不做。如果数据未在 tableview 中正确显示,则问题很可能出在 tableview 委托/数据源方法中,您将获取的结果控制器的内容连接到 tableview。
【讨论】:
感谢您的回答。我也想过这个。但是 NSFetchedResultsController 为我做了所有的处理。如果我找不到其他解决方案,我会这样做。 ;-) 是的,这里有同样的问题。使用 fetchcontroller 为您的表创建所有部分非常方便。这里的最佳做法是什么?以上是关于NSFetchedResultsController 和关系的主要内容,如果未能解决你的问题,请参考以下文章