在我的核心数据模型中,我有一个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
答案 0 :(得分:2)
错误意味着数据模型中不存在用于定义NSFetchedResultsController的键路径(可能是关系)。这些错误通常出现在谓词和排序定义中。
在某个地方,你有一条像“person.course.someattribute.somerelationship”这样的路径,而在你的模型中你得到了person.course.somerelationship。或者你可能只是拼错了诸如关键名之类的东西。
答案 1 :(得分:0)
您是否在第二个视图控制器中访问在第一个视图控制器中检索到的Person对象?如果你这样做,那么在第一个executeFetchRequest中加上一个显式的retain,如下所示:
[[[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0] retain];
这是因为executeFetchRequest返回自动释放对象。所以,你必须保留。希望对你有帮助。