我正在尝试使用Restkit with Blocks等待响应。
示例:
NSArray *myArray = ["RESULT OF REST-REQUEST"];
// Working with the array here.
我的一个阻止请求:
- (UIImage*)getPhotoWithID:(NSString*)photoID style:(NSString*)style authToken:(NSString*)authToken {
__block UIImage *image;
NSDictionary *parameter = [NSDictionary dictionaryWithKeysAndObjects:@"auth_token", authToken, nil];
RKURL *url = [RKURL URLWithBaseURLString:@"urlBase" resourcePath:@"resourcePath" queryParameters:parameter];
NSLog(@"%@", [url absoluteString]);
[[RKClient sharedClient] get:[url absoluteString] usingBlock:^(RKRequest *request) {
request.onDidLoadResponse = ^(RKResponse *response) {
NSLog(@"Response: %@", [response bodyAsString]);
image = [UIImage imageWithData:[response body]];
};
}];
return image;
}
答案 0 :(得分:2)
您无法在此方法中返回任何内容,因为获取图片将是异步的 - 它必须是-(void)
。
那么,你做什么的?您应该将调用此方法的操作放在响应块中。警惕块中的retain cycles。
__block MyObject *selfRef = self;
[[RKClient sharedClient] get:[url absoluteString] usingBlock:^(RKRequest *request) {
request.onDidLoadResponse = ^(RKResponse *response) {
NSLog(@"Response: %@", [response bodyAsString]);
image = [UIImage imageWithData:[response body]];
[selfRef doSomethingWithImage:image];
};
}];
答案 1 :(得分:0)
上面的代码无法在启用ARC的情况下使用(自iOS 5.0起默认为XCode)。在ARC下,__block变量不再免于自动保留。在iOS 5.0及更高版本中使用__weak而不是__block来打破保留周期。