Reskit - 在同一个线程而不是UI线程上回调

时间:2014-10-28 05:29:58

标签: ios ios8 restkit

我在后台线程中执行getObjectsAtPath。但是,在UI线程上调用成功/失败块。

有没有办法强制RestKit在同一个线程上调用成功和失败块,而不是在UI线程上?

1 个答案:

答案 0 :(得分: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);