如何避免将核心数据实体提取为故障?

时间:2018-12-20 13:32:10

标签: ios swift core-data nsfetchrequest

在屏幕过渡期间,我有一个Core数据模型类对象,该对象从一个类传递到另一个类。但是在此期间有时会出现“零”现象,当我尝试对其进行记录时,我发现它已返回故障。在获取它时,我已经设置了:

        fetchRequestObject.returnsObjectsAsFaults = false

我是核心数据的新手。下面是我尝试打印对象时的日志:

    Optional<"MyEntity">
      - some : <ProjectName.MyEntity: 0x2822acdc0> (entity: "MyEntity"; id: 0x9ddeded1ada58e31 <x-coredata://27FC66FC-4FDF-4B40-9541-F4E90622906C/MyEntity/p34705> ; data: <fault>)

很多时候它可以打印并使用其属性和值。但其他时候它是“无”。

1 个答案:

答案 0 :(得分:1)

我也遇到过类似的问题

通常,不必担心故障(CoreData将在您访问其任何属性后自动触发故障并填充对象)。

但是在这种情况下,我怀疑正在发生更恶毒的事情:在该fetch方法中本地实例化了CoreData,而且我担心一旦该方法完成,它就会被重新分配(连同相关的managedObjectContext)。因此,您的返回数组包含来自已释放环境的NSManagedObjects。要进行检查,请尝试将managedObjectContext设置为属性(全局变量)而不是局部变量。这样就足以保持对上下文的永久引用(而后者又将对基础堆栈具有强大的引用)并防止将其释放。