2014-04-01 2 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는 (코디네이터) 캐쉬에서 객체를 페치 유지하는 문맥.