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 和关系的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 应用程序中调用 performFetch 后,是不是需要手动更新表视图?