如何为托管对象的关系触发故障
Posted
技术标签:
【中文标题】如何为托管对象的关系触发故障【英文标题】:How to fire fault for a relationship of a Managed Object 【发布时间】:2014-12-29 08:52:27 【问题描述】:这是我正在使用的模型:
CourseProgram <--->> Student --->> Grades
当我从 Core Data 中获取我的 Course Program 托管对象时,它会正确返回 Student,但将 Grades 作为关系错误返回。
我了解 Core Data 会返回关系错误以减少开销。根据Apple documentation,我可以使用setReturnsObjectsAsFaults:
来强制Core Data 返回托管对象而不是故障。
我试过了,没用。每当我执行课程计划的获取请求时,我都无法将成绩作为托管对象获取。我如何为一段关系开火?
这是我用来获取课程项目对象的代码
// Fetch from persistent data store
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"CoursePrograms"];
[fetchRequest setReturnsObjectsAsFaults:YES];
NSArray *coursePrograms = [managedObjectContext executeFetchRequest:fetchRequest error:nil];
return coursePrograms;
【问题讨论】:
为什么要这样做?你能显示“不起作用”的代码吗? @jrturton 更新了我的代码 好的,你为什么要这样做?根据您的对象图,预取所有关系可以一次将每个对象提取到内存中 我需要加载成绩,以便存档和发送数据。无论如何,Course Programs 的 行数 是有限的,不超过 20,所以我想这不会严重影响性能 【参考方案1】:我认为你不必担心关系会因为错误而卷土重来。只需通过您获得的对象的关系访问它们,就会为您触发错误(转换为完整对象)。
如果您的 fetch 请求返回了一系列课程程序,您可以遍历 students
,然后遍历每个学生的成绩。无论是否将它们作为故障提取都不会产生影响,您仍然可以获得数据。
如果您有兴趣,我已经写过关于错误here 的常见误解。
【讨论】:
这完全是错误的。现在我正在测试一个应用程序,其中访问关系错误什么都不做。他们不会开火。 访问错误不会执行任何操作,访问相关对象的 属性 会触发错误。重点是,你不应该在意。发生故障是有原因的,它永远不会阻止您查看所需的数据。以上是关于如何为托管对象的关系触发故障的主要内容,如果未能解决你的问题,请参考以下文章