我在后台线程中执行getObjectsAtPath。但是,在UI线程上调用成功/失败块。
有没有办法强制RestKit在同一个线程上调用成功和失败块,而不是在UI线程上?
答案 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);