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

Posted

技术标签:

【中文标题】核心数据 - 如何在不触发错误的情况下检查对象关系是不是存在【英文标题】:Core Data - How to check if an object relationship exists without firing a fault核心数据 - 如何在不触发错误的情况下检查对象关系是否存在 【发布时间】:2013-11-16 13:18:26 【问题描述】:

有一个对象 A 和一个对象 B。对象 B 有一个可转换类型的属性(图像),以及一个与对象 A 的关系。对象 A 可能有一个关系到一个,并且只有一个,对象 B,或者它可能不会。

当我枚举我的对象 A 数组时,我想检查每个对象 A 是否有一个对象 B。但是,我不想触发对象 B 的错误(这将调用反向 imageToData NSValueTransformer)。我只是想知道它是否存在。如何在不将对象 B 放入内存的情况下做到这一点?

【问题讨论】:

【参考方案1】:

我认为你可以测试一下

if (objectA.relationshipToB != nil) ...

这不会为相关的B 对象触发错误,因为您没有访问它的属性

【讨论】:

谢谢,有道理。我认为 objectA.relationshipToB 会导致自动错误,但我很高兴看到它不会。【参考方案2】:

在 Swift 中我得到了一个

找不到接受提供的参数的 '!=' 的重载

错误。我的关系被正确标记为可选,但在生成的NSManagedObject 中,我的@NSManaged 属性后面没有?。所以对nil 的检查失败了。我添加了?,然后我可以检查关系是否存在。

之前(没用)

@NSManaged var myRelationShip: MyClass

之后(工作)

@NSManaged var myRelationShip: MyClass? // <--- Added `?`

【讨论】:

以上是关于核心数据 - 如何在不触发错误的情况下检查对象关系是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何在不复制目标 NSManagedObject 的情况下将目标 NSManagedObject 添加到另一个具有反向多对多核心数据关系的对象?

在不获取现有对象的情况下创建核心数据关系

核心数据:如何在不通过字符串引用实体的情况下创建托管对象

在不调用当前 NSManagedObjectContext (核心数据)的情况下检查 iOS 中的数据库是不是为空?

如何在不使用对象的情况下检查 DataGridViewComboBoxColumn 中的项目?

Nightwatchjs:如何在不创建错误/失败/异常的情况下检查元素是不是存在