- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
In the CoreData Apple Docs on working in the background ,我遇到了这条建议:
For example, you can configure a fetch request to return just object IDs but also include the row data (and update the row cache)—this can be useful if you're just going to pass those object IDs from a background thread to another thread.
我想知道您如何实现这个获取请求?具体如何更新行缓存。
我认为这就是获取 ID 的方法:
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"MyItem"]; // iOS 5 method
request.returnsObjectsAsFaults = YES;
剩下的我该怎么做?
最佳答案
默认情况下,includesPropertyValues 为 YES,returnsObjectsAsFaults 也为 YES。
如果你只想返回对象ID,你需要使用...
fetchRequest.resultType = NSManagedObjectIDResultType;
但是,没有要获取的属性,也不会填充行缓存。您只会得到一堆对象 ID。
请注意,默认情况下,(resultType == NSManagedObjectResultType),因为 includesPropertyValues 和 returnsObjectsAsFaults 都是 YES,提取将返回对象作为错误(对象 ID 可访问),并且行缓存将被填充 - 但数据不会真正“在内存中”,因为该对象仍然是错误的……但您仍然可以获取其对象 ID。
然后您需要做的就是向对象询问其 objectID。
所有这一切,我想,就是说您要求的行为是您默认获得的行为。那么,您是遇到问题了,还是出于某种原因认为自己没有出现这种行为?
编辑
嗯……我是说默认情况下,你会得到你想要的。如果您只是填写一个提取请求,并且不更改任何属性,则 returnsObjectsAsFaults 为 YES——因此返回给您的对象将是错误的。此外,includesPropertyValues 也是 YES —— 因此一些属性数据将在行缓存中可用。
您可以通过调用 managedObject.objectID 来访问 objectID 属性。
编辑
我很抱歉,因为我显然没有做好沟通工作,因为这将是我第三次说同样的话。
当您创建一个 NSFetchRequest 时,它有几个默认设置的属性。
resultType 默认设置为 NSManagedObjectResultType。这意味着,除非你改变它,否则它仍然是 NSManagedObjectResultType。这也意味着您从获取中获得的结果数组将包含一个 NSManagedObjects 数组(而不是返回一个计数、字典或 ObjectID)。
returnsObjectsAsFaults 默认设置为 YES。这意味着,除非您更改它,否则它仍然是 YES。这也意味着从提取中返回的对象将是错误的。 NSManagedObject 不会用属性数据来实现。该对象将是一个故障。它将有足够的元数据来了解其类型、对象 ID 和一些其他内容。
includesPropertyValues 默认设置为 YES。这意味着,除非您更改它,否则它仍然是 YES。这也意味着一些属性数据将被提取到行缓存中。
从获取中返回的每个 NSManagedObject 将:
这就是您所要求的一切。我不确定我还能添加什么(无需再次重复)。
另外,请注意,如果您只需要对象 ID,您可以将 resultType 设置为 NSManagedObjectIDResultType。
直接来自 NSFetchRequest 文档...
includesPropertyValues
You can set includesPropertyValues to NO to reduce memory overhead by avoiding creation of objects to represent the property values. You should typically only do so, however, if you are sure that either you will not need the actual property data or you already have the information in the row cache, otherwise you will incur multiple trips to the database.
During a normal fetch (includesPropertyValues is YES), Core Data fetches the object ID and property data for the matching records, fills the row cache with the information, and returns managed object as faults (see returnsObjectsAsFaults). These faults are managed objects, but all of their property data still resides in the row cache until the fault is fired. When the fault is fired, Core Data retrieves the data from the row cache—there is no need to go back to the database.
If includesPropertyValues is NO, then Core Data fetches only the object ID information for the matching records—it does not populate the row cache. Core Data still returns managed objects since it only needs managed object IDs to create faults. However, if you subsequently fire the fault, Core Data looks in the (empty) row cache, doesn't find any data, and then goes back to the store a second time for the data.
和...
returnsObjectsAsFaults
The default value is YES. This setting is not used if the result type (see resultType) is NSManagedObjectIDResultType, as object IDs do not have property values. You can set returnsObjectsAsFaults to NO to gain a performance benefit if you know you will need to access the property values from the returned objects.
By default, when you execute a fetch returnsObjectsAsFaults is YES; Core Data fetches the object data for the matching records, fills the row cache with the information, and returns managed object as faults. These faults are managed objects, but all of their property data resides in the row cache until the fault is fired. When the fault is fired, Core Data retrieves the data from the row cache. Although the overhead for this operation is small, for large datasets it may become non-trivial. If you need to access the property values from the returned objects (for example, if you iterate over all the objects to calculate the average value of a particular attribute), then it is more efficient to set returnsObjectsAsFaults to NO to avoid the additional overhead.
关于iphone - 如何只获取对象 ID,还包括 CoreData 中的行数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10532626/
出现在 python 2.7.8 中。 3.4.1 不会发生这种情况。 示例: >>> id(id) 140117478913736 >>> id(id) 140117478913736 >>> id
好吧,我对动态创建的控件的 ID 很困惑。 Public Class TestClass Inherits Panel Implements INamingContainer
我收到下面的错误,说有堆栈溢出。发生这种情况是因为带有 IN (id, id, id...id) 的 SQL 语句有大量参数。有没有什么办法解决这一问题?这是在我使用 Eclipse 的本地环境中发生
为什么 CPython(不知道其他 Python 实现)有以下行为? tuple1 = () tuple2 = ()
为什么 CPython(对其他 Python 实现一无所知)有以下行为? tuple1 = () tuple2 = ()
非常简单的问题:当我有一个持久对象时,它通常有一个名为 ID 的属性(对于抽象类)。 那么..命名约定是ID还是Id? 例如。 public int ID { get; set; } 或 public
知道为什么我会收到此错误,我已经尝试了所有命名约定(小写/大写) 我正在使用 Vaadin,这是我的代码片段: public class Usercontainer extends BeanI
为什么 CPython(不知道其他 Python 实现)有以下行为? tuple1 = () tuple2 = ()
我需要改变表的所有主键 UPDATE TODO SET id = id + 1 但我做不到(Demo 来自 Ahmad Al-Mutawa 的回答)描述了原因。主键不能这样改。 我也不能根据这是 sq
我正在尝试列出与用户相关的讨论列表。 想象一下,如果你愿意的话: posts -------------------------------------------------------------
我有一个表,其中包含一些具有自己的 ID 和共享 SKU key 的文章。我尝试使用左连接进行查询,并使用组结果获取从查询返回的所有 id。 我的数据结构是这样的: id - name -
在下表People中: id name 1 James 2 Yun 3 Ethan 如果我想找到最大 ID,我可以运行此查询 select max(id) id from People; 结果是
我正在产品页面上创建评论模块,其中显示垃圾评论选项,并显示 onclick 显示和隐藏弹出窗口。现在它在单个评论中工作正常但是当评论是两个时它同时打开两个因为类是相同的。现在这就是为什么我想要获取父
根据 REST 哲学,PUT操作应该(取自维基百科): PUT http://example.com/resources/142 Update the address member of the co
我想知道如何在使用 PHP 或 JavaScript 进行身份验证后从 Google Analytics 获取 Property Id、View Id 和 Account Id?因为我希望能够将它们存
我想使用所选按钮的 ID 进行删除。但我不知道如何从中获取/获取 id。我尝试了 this.id 但不起作用。 这是我创建按钮的地方: var deleteEmployer= document.cre
我有一个具有以下结构的表“表” ID LinkedWith 12 13 13 12 14 13 15 14 16
请不要在未阅读问题的情况下将问题标记为重复。我确实发布了一个类似的问题,但 STACKOVERFLOW 社区成员要求我单独重新发布修改后的问题,因为考虑到一个小而微妙的修改,解决方案要复杂得多。 假设
在 Android Studio 中,我创建了一个 Person.java 类。我使用Generate 创建了getter 和setter 以及构造函数。 这是我的 Person.java 类: pu
如何在 jQuery 中制作这样的东西: //这是显示的主体 ID //当我悬停 #hover-id 时,我希望 #principal-id 消失并更改 。但是当我将光标放在 #this-id 上时
我是一名优秀的程序员,十分优秀!