与核心数据的关系错误

Posted

技术标签:

【中文标题】与核心数据的关系错误【英文标题】:Relationship fault with core data 【发布时间】:2014-07-30 09:52:01 【问题描述】:

(使用 swift / Xcode beta 3)

我的项目中有两个实体 - 一个与其子实体具有一对多关系的父实体。在保存上下文之前添加新对象时,一切正常。但是,在重新启动应用程序并再次获取父对象后,我收到了所有子对象的“关系错误”。这就是我保存上下文的方式:

 func saveContext () 
    var error: NSError? = nil
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context =  appDel.managedObjectContext

    if context == nil 
        return
    
    if !context.hasChanges 
        return
    
    if context.save(&error) 
        return
    

    println("Error saving context: \(error?.localizedDescription)\n\(error?.userInfo)")
    abort()

我尝试更改 includesSubentities = truesetReturnsObjectsAsFaults = false 但似乎没有帮助。 Objective-C 的“关系错误”问题的大多数答案似乎都使​​用了 setRelationshipKeyPathsForPrefetching,但在 Swift 中将它与 NSFetchRequest 一起使用似乎是不可能的。

我有什么遗漏吗?

【问题讨论】:

关系故障很好。就核心数据而言,故障并不是真正的对象。它尚未实现,因此当您尝试访问属性时,它会从持久存储中获取并构建对象。 您好,谢谢您的回答。不幸的是,我无法获取这些子对象,而仅仅访问它们并不能完成这项工作。 请展示您如何尝试获取父对象及其子对象的代码。 @Paweł 你有解决方案吗? 【参考方案1】:

正如 GeneratorOfOne 所说,错误只是意味着对象尚未被提取到内存中。而且您是正确的,您“无法获取这些子对象并且仅访问它们并不能完成这项工作。”要获取对象,您必须评估对象的属性,即实际使用对象中的值。

【讨论】:

【参考方案2】:

这很正常。除非您使用该对象,否则它会给您带来错误问题,它希望加载到内存中直到您使用它

【讨论】:

以上是关于与核心数据的关系错误的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 如何在不触发错误的情况下检查对象关系是不是存在

核心数据与许多对等关系

核心数据关系错误

核心数据关系在删除后导致保存错误

访问核心数据中的子对象时出现关系错误

保存到与核心数据的许多关系时出错