这是我到目前为止所做的:
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被阻止,所以我试图弄清楚如何在不阻塞主线程的情况下进行获取。
答案 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获取的对象保留在(协调器)缓存中。