2014-04-01 79 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在(協調)緩存中提取對象,而從主訪問它們上下文。