使用MagicalRecord在后台执行获取请求

时间:2014-04-01 19:16:16

标签: ios core-data nsmanagedobjectcontext magicalrecord

这是我到目前为止所做的:

NSManagedObjectContext *privateContext = [NSManagedObjectContext MR_context];
[privateContext performBlock:^{
        Cat* object = [Cat MR_findFirstByAttribute:@"id" withValue:catId inContext:privateContext];
        // Convert your fetched objects into object IDs which can be pulled out of the main context
        NSString *privateObjectID = [object valueForKey:@"objectID"];

        // Return to our main thread
        dispatch_async(dispatch_get_main_queue(), ^{
            ???
        });
    }];

这是正确的做法吗?如果是这样,我如何让我的对象回到主线程? (上面的???区域)

如果我这样做:

NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread];
Cat* object = [Cat MR_findFirstByAttribute:@"id" withValue:catId inContext:context];

UI被阻止,所以我试图弄清楚如何在不阻塞主线程的情况下进行获取。

1 个答案:

答案 0 :(得分:1)

块内的代码(在主线程上执行的代码)应该是:

NSManagedObjectContext* c = [NSManagedObjectContext MR_contextForCurrentThread];
Cat* o = (Cat*)[context objectWithID:object.objectID];
//access `o` so it will get faulted in by the main context
//I think you could use: [o valueForKey:nil] or [o didAccessValueForKey:nil]

重要的是在从主要上下文访问BG中时,将BG获取的对象保留在(协调器)缓存中。