- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想要一份关于两者比较的完整 list 。我知道的事情:
执行FetchRequest
:
performFetch
:
fetchedObjects
返回一个托管对象数组performFetch
来初始化该过程。 performFetch
如果我错了请纠正我并附上列表。谢谢。
最佳答案
关于 executeFetchRequest:
Message sent to MOC
是
Return an array of managed objects
是的,但您也可以更改要检索的结果类型。在 NSFetchRequest
中,您可以设置不同的结果类型:
- (void)setResultType:(NSFetchRequestResultType)type
NSFetchRequestResultType
可以是不同的类型。摘自 Apple 文档:
enum {
NSManagedObjectResultType = 0x00,
NSManagedObjectIDResultType = 0x01,
NSDictionaryResultType = 0x02
NSCountResultType = 0x04
};
typedef NSUInteger NSFetchRequestResultType;
Goal: fetch objects from persistent store to MOC
是的,创建一个 NSFetchRequest
并执行请求,这与在 SQL 中创建一个 SELECT 语句相同。如果您还使用 NSPredicate
,则与使用 SELECT-WHERE 语句相同。
With table view: has nothing to do with table view
是的,但是您可以使用检索到的数据填充表格
Frequency: often used in a loop, so could be called many many times
这取决于您想要实现的目标。它可能在一个循环内,也可能不在循环内。在一个循环中执行请求可能会对性能产生影响,但我不会为此担心。在底层,Core Data 维护着一种缓存机制。每次执行请求时,如果数据不在缓存中,Core Data 会在你的存储(例如 sql 文件)上执行一次往返,并用它检索到的对象填充缓存。如果执行相同的查询,由于缓存机制,不会再次执行往返。无论如何,您可以避免在运行循环内执行请求,只需将该请求移出循环即可。
关于performFetch:
Message sent to FRC
是
After calling it, use fetchedObjects to return an array of managed objects
是的,但如果您要填充表格中的特定单元格,您也可以使用 [_fetchedResultsController objectAtIndexPath:indexPath];
检索对象。
在这里,我真的建议阅读关于 NSFetchedResultsController 的精彩教程。
With table view: FRC is specifically for keeping managed objects and table view rows in sync, and use performFetch to initialize that process.
是的,NSFetchedResultsController
可以与 NSManagedObjectContext
结合使用。此外,它还支持延迟加载数据。假设您有 1000 个要检索的元素,并且您希望将它们显示在 UITableView
中。为 NSFetchRequest
设置请求,例如:
[fetchRequest setFetchBatchSize:20];
并将它与 NSFetchedResultsController
的实例一起使用,它允许首先加载 20 个元素。然后,当您滚动时,会加载其他 20 个元素,依此类推。如果没有 NSFetchedResultsController
,您必须手动实现此行为。请参阅我提供的教程以获取更多信息。
Frequency: often only once. Unless fetch request of FRC changes, no need to call performFetch a second time
这取决于你想达到什么目的。大多数情况下,您可以调用一次。
希望对您有所帮助。
编辑
您必须显式调用 performFetch
。我喜欢在我的头文件 (.h) 中为 NSFetchedResultsController
创建一个属性,例如
@property (nonatomic, strong, readonly) NSFetchedResultsController* fetchedResultsController;
并在你的实现文件(.m)中合成它,比如
@synthesize fetchedResultsController = _fetchedResultsController;
然后始终在 .m 文件中覆盖 getter 以创建它的新实例:
- (NSFetchedResultsController*)fetchedResultsController
{
// it already exists, so return it
if(_fetchedResultsController) return _fetchedResultsController;
// else create it and return
_fetchedResultsController = // alloc-init here with complete setup
return _fetchedResultsController;
}
完成后,在您的类中(例如在 viewDidLoad
方法中)像这样使用它
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
// Handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
关于objective-c - 核心数据 : executeFetchRequest vs performFetch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12645641/
我在 iOS 上使用 C# (Xamarin),但我怀疑这个问题也适用于 Objective C 中的编程。 iOS 7 引入了后台“获取”功能,让应用程序在后台下载数据。 我读过的所有文档(在 Xa
调用 [self.fetchedResultsController performFetch] 时出现以下错误。 * 由于未捕获的异常“NSInvalidArgumentException”而终止应用
我目前面临一个(对我来说)奇怪的问题如下: 我有一个子 MOC (NSManagedObjectContext),它有大约两打 MO (NSManagedObject)。每个 MO 都有一个可选的 b
我在屏幕上有分段控制。 1 个分段项目用于广告(广告表),第二个分段项目用于订单(订单表)。每次当用户选择分段项目时,我都会重新创建 NSFetchResultController 的实例,并向另一个
我对使用核心数据还很陌生,所以我可能做错了什么。 我将 NSFetchedResultsController 与 UITableView 一起使用,performFetch() 函数解码相应实体中的所
我正在使用斯坦福类(class) cs193p 中的 CoreDataTableViewController,并在我的 viewWillAppear 中调用 self.fetchedResultsCo
我写代码 var fetchRequest: NSFetchRequest = NSFetchRequest(entityName: "Doctor") fetchRequest.pr
我想在后台更新我的应用程序,所以我在我的 info.plist 中添加了“获取”所需的后台模式。在我的 FinishedLaunching 中,我添加了: UIApplication.SharedAp
我在数据库中只有 3237 条记录,我使用 UISearchDisplayController 和 NSFetchedResultsController 进行搜索。但是当我输入关键字进行搜索时,速度非
我的应用程序在“尝试”行崩溃。我怎么理解为什么? CoreData SQL 调试已激活,但没有显示任何可疑内容。 do { try controller.performFetch() } ca
viewWillAppear 中的第一个调用不起作用。 block 回调中的第二次调用有效。它不会造成任何伤害,但我想知道为什么? 在我看来,调用performFetch 应该是一次性的事情,前提是之
我想要一份关于两者比较的完整 list 。我知道的事情: 执行FetchRequest: 消息已发送至 MOC 返回一个托管对象数组 目标:从持久存储中获取对象到 MOC With table vie
当我的主视图 Controller 加载并调用 viewDidLoad 时,我正在执行一个获取请求并退出一个数组或我的核心数据对象: + (NSArray *)getData { // Fet
我有一个选项卡式应用程序,它有 2 个选项卡和 2 个 UITableView。 我也有 2 个 NSFetchedResultsController 类型的对象,但它们都在同一个实体上,具有不同的顺
我使用 NSFetchedResultsController 来显示一堆对象,这些对象是使用日期划分的。在全新安装时,一切正常,对象显示在表格 View 中。但是,似乎当应用程序重新启动时我遇到了崩溃
我有一个 UITableViewController,我想向它提供核心数据模型的内容。但是,当我获取内容时,我的应用程序崩溃了。这是 init 方法(我将 NSManagedObjectContext
我构建了一个应用程序以通过 WLAN 发送 OSC 消息。 这就是为什么我有一个包含单个对象的“网络”实体。为此,我想要一个 Singleton 来获取这个对象。 在 AppDelegate 中,我创
我是核心数据业务的新手。 我得到了一个与 NSFetchedResultsController 连接的 UITableViewController。在 viewDidLoad 中,我触发请求以从服务器
使用等效的 NSFetchRequest 重新创建 NSFetchedResultsController 时,为什么 [NSFetchedResultsController PerformFetch:
在我的崩溃日志中,我发现了一个有趣的崩溃,但我不明白为什么会发生。我也无法复制它。 在我的 tableView:didSelectRowAtIndexPath: 方法实现中的以下行中,当用户点击一个单
我是一名优秀的程序员,十分优秀!