iOS RestKit块

时间:2012-07-17 08:31:39

标签: ios restkit block

我正在尝试使用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;
}

2 个答案:

答案 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来打破保留周期。