核心数据 - 如何在不触发错误的情况下检查对象关系是不是存在
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 中的数据库是不是为空?