0

我正在尝试使用带有 Blocks 的 Restkit 等待响应。

例子:

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;
}
4

2 回答 2

1

您不能在此方法中返回任何内容,因为图像的获取将是异步的 - 它必须是-(void).

所以你会怎么做?您应该将调用此方法的操作放在响应块中。警惕块中的保留循环

__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];

    };
}];
于 2012-07-17T08:53:07.123 回答
0

上面的代码在 ARC 开启的情况下不起作用(XCode 自 iOS 5.0 起默认)。__block 变量不再免除 ARC 下的自动保留。在 iOS 5.0 及更高版本中使用 __weak 而不是 __block 来打破保留周期。

于 2013-02-27T02:31:59.010 回答