2

在我的核心数据模型中,我有一个 Person 实体,它与 Course 实体具有“对多”关系(我也有从 Course 到 Person 的反向“对一个”关系)。

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

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

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

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

两个 ViewController 之间的代码几乎相同,除了 NSFetchedResultsController 被配置为一个中的“Person”实体和另一个中的“Course”实体

4

2 回答 2

2

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

在某个地方,您有类似“person.course.someattribute.somerelationship”的路径,而在您的模型中,您有 person.course.somerelationship。或者您可能只是拼错了诸如键名之类的内容。

于 2010-03-07T23:18:46.997 回答
0

您是否访问在第二个视图控制器的第一个视图控制器中检索到的 Person 对象?如果这样做,则在第一个 executeFetchRequest 中放置一个显式保留,如下所示:

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

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

于 2010-03-07T23:19:55.700 回答