2014-10-28 2 views
0

백그라운드 스레드에서 getObjectsAtPath를 수행하고 있습니다. 그러나 성공/실패 블록은 UI 스레드에서 호출됩니다.Reskit - UI 스레드 대신 동일한 스레드에서 콜백

RestKit이 UI 스레드에서 같은 스레드에서 성공 및 실패 블록을 강제로 호출하도록 할 수있는 방법이 있습니까?

답변

1

Restkit은이 기능을 제공하지 않지만이를 보관할 수 있습니다.

RKObjectRequestOperation 클래스에는 콜백 대기열을 설정할 수있는 두 가지 속성 successCallbackQueue & failureCallbackQueue이 있습니다. RKObjectManager 클래스를 덮어 쓰고 RKObjectRequestOperation을 반환하면 콜백 대기열을 설정할 수 있습니다. 울부 짖는 소리 같이

- (RKObjectRequestOperation *)getObjectsAtPath:(NSString *)path 
      parameters:(NSDictionary *)parameters 
      success:(void (^)(RKObjectRequestOperation *operation, RKMappingResult *mappingResult))success 
      failure:(void (^)(RKObjectRequestOperation *operation, NSError *error))failure 
{ 
    NSParameterAssert(path); 
    RKObjectRequestOperation *operation = [self appropriateObjectRequestOperationWithObject:nil method:RKRequestMethodGET path:path parameters:parameters]; 
    [operation setCompletionBlockWithSuccess:success failure:failure]; 
    [self enqueueObjectRequestOperation:operation]; 
    return operation; 
} 

그럼 당신은 콜백 대기열을 설정할 수 있습니다

RKObjectManager *objectManager = [RKObjectManager sharedManager]; 
RKObjectRequestOperation *operation = [objectManager getObjectsAtPath:path 
        parameters:parameters 
         success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 

         } 
         failure:^(RKObjectRequestOperation *operation, NSError *error) { 

         }]; 

operation.successCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); 
operation.failureCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); 
관련 문제