returnsObjectsAsFaults的目的是什么

时间:2015-12-31 11:21:15

标签: ios core-data

我真的不明白“returnsObjectsAsFaults”的用法。 文档说:

  

一个布尔值,指示使用接收器获取的对象是否是错误。

     

如果使用接收器获取的对象是故障,则为YES,否则为NO。默认值为YES。如果结果类型(请参阅resultType)是NSManagedObjectIDResultType,则不使用此设置,因为对象ID没有属性值。如果您知道需要从返回的对象访问属性值,则可以将returnsObjectsAsFaults设置为NO以获得性能优势。

     

默认情况下,执行fetch返回时,对象AsFaults为YES; Core Data获取匹配记录的对象数据,使用信息填充行缓存,并将托管对象作为错误返回。这些故障是受管对象,但它们的所有属性数据都驻留在行高速缓存中,直到触发故障为止。发生故障时,Core Data会从行缓存中检索数据。尽管此操作的开销很小,但对于大型数据集,它可能变得非常重要。如果需要从返回的对象访问属性值(例如,如果迭代所有对象以计算特定属性的平均值),则将returnsObjectsAsFaults设置为NO以避免额外开销会更有效。

将托管对象作为错误返回是什么意思?

因此,如果将其设置为true,那么对象将存储在缓存中并且无法访问?

另一方面,假将使其可访问?

请帮助我清楚这一点,因为我对文档的解释感到非常困惑。

let request = NSFetchRequest(entityName: "BlogItems")
request.returnsObjectsAsFaults = false

2 个答案:

答案 0 :(得分:9)

我今天偶然发现了这个问题。

我们有一些iPad和iPhone应用程序,但今天,重建它们返回正确数量的记录,但每个都是空的。

事业的原因是荒谬的旗帜:

request.returnsObjectsAsFaults = false

让我烦恼的是:

  • 这个字段从来没有用过"妨碍"。自上一版本的iOS或其他版本以来,默认设置是否已更改?
  • 这个属性的名字很荒谬。您希望能够设置" includesPropertyValues"为TRUE,这足以,errrm,包括属性值。
  • 即使Apple自己的CoreData示例代码也没有提到这个(必要的)设置,所以即使是初学者也会想知道为什么他们的代码,基于Apple的例子,并不是工作

Apple: Fetching objects from CoreData

  • Apple的文档声称" 故障处理是透明的 - 您不必执行提取来实现故障。如果在某个阶段访问了一个故障对象的持久属性,那么Core Data会自动检索该对象的数据并初始化该对象。"什么是垃圾。这根本不是真的。

Apple: Faulting and Uniquing

我非常厌恶Xcode,每个版本似乎都会让你更多的理由讨厌它。在撰写本文时,App Store对Xcode的平均评分仅为2星,Apple似乎忽略了用户对其有多糟糕的抱怨。

无论如何,咆哮。 Here's a link到StackOverflow文章,该文章描述了returnsObjectsAsFaultsincludesPropertyValues之间的差异以及second link,为您提供了如何在iOS编程中生存的详细信息。

是的,有人知道Apple目前是否正在招聘?这篇文章在我的简历上看起来不错......

答案 1 :(得分:1)

看起来你回答了自己的问题。更多来自文档:

  

托管对象错误是相应类的实例,但是   它的持久变量尚未初始化

阅读“核心数据编程指南”的Faulting and Uniquing部分。