2014-04-01 25 views
1

执行取回在后台请求这是我到目前为止有:使用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

块(主线程上执行的一个)中的代码应该是:

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在(协调)缓存中提取对象,而从主访问它们上下文。