【问题标题】:CoreData - How to do NSFetchRequest with temporary context with NSPrivateQueueConcurrencyType?CoreData - 如何使用 NSPrivateQueueConcurrencyType 使用临时上下文执行 NSFetchRequest?
【发布时间】:2012-09-11 23:07:43
【问题描述】:

从 iOS 5 开始,CoreData 引入了自己的 private queue,您可以在其中让一些操作 (especially save context) 在后台运行。

这必须通过[context performBlock:...] 完成。

saving the context 很容易很好。但是,NSFetchRequest 怎么样?我的意思是如果我想获取一些东西并希望在后台获取呢?我不认为 [context performBlock..] 可以做到这一点。

还有新的方法吗?

【问题讨论】:

    标签: iphone performance core-data nsfetchedresultscontroller nsmanagedobjectcontext


    【解决方案1】:

    任何涉及NSPrivateQueueConcurrencyTypeNSManagedObjectContext 的内容都应包含在performBlock 块中。对于后台获取,您希望将托管对象传回主队列的上下文,如下所示:(请注意,这仅用于说明目的):

    // assume self.managedObjectContext is a main queue context
    NSManagedObjectContext *backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [backgroundContext performBlock:^{
        // do your fetch - e.g. executeFetchRequest
        NSManagedObjectID *objID = [someManagedObject objectID];
        [self.managedObjectContext performBlock:^{
            NSManagedObject *mainManagedObject = [self.managedObjectContext objectWithID:objID];
            //  do something now with this managed object in the main context
        }];
    }];
    

    【讨论】:

    • 谢谢。如果我想在后台获取一个 nsresultscontroller 并让主 UI 使用它怎么办?
    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多