从一个UITableViewController导航到另一个时,NSFetchedResultsController崩溃

时间:2010-03-07 23:10:01

标签: iphone core-data uitableview nsfetchedresultscontroller

在我的核心数据模型中,我有一个Person实体,它与一个“to many”关系是一个Course实体(我在课程与人之间也有一个“一对一”的逆关系。)

现在我有一个子类UITableViewController,它使用NSFetchedResultsController来显示工作正常的Person对象。我有这个设置,所以当你点击一个Person时,它会发布另一个使用NSFetchedController的子类UITableViewController,以显示与该人相关的课程。

问题:每当我点击Person并尝试显示Course UITableViewController时,我都会收到此异常......

"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath name not found in entity <NSSQLEntity Course id=2>“”

有关如何解决或排除故障的任何想法?

两个ViewControllers之间的代码几乎完全相同,只是为一个中的“Person”实体和另一个中的“Course”实体配置了NSFetchedResultsController

2 个答案:

答案 0 :(得分:2)

错误意味着数据模型中不存在用于定义NSFetchedResultsController的键路径(可能是关系)。这些错误通常出现在谓词和排序定义中。

在某个地方,你有一条像“person.course.someattribute.somerelationship”这样的路径,而在你的模型中你得到了person.course.somerelationship。或者你可能只是拼错了诸如关键名之类的东西。

答案 1 :(得分:0)

您是否在第二个视图控制器中访问在第一个视图控制器中检索到的Person对象?如果你这样做,那么在第一个executeFetchRequest中加上一个显式的retain,如下所示:

[[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0] retain];

这是因为executeFetchRequest返回自动释放对象。所以,你必须保留。希望对你有帮助。