0

RestkitwithBlocksを使用して応答を待とうとしています。

例:

NSArray *myArray = ["RESULT OF REST-REQUEST"];

// Working with the array here.

私のブロックリクエストの1つ:

- (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 がオンになっていると機能しません (iOS 5.0 以降の XCode のデフォルト)。__block 変数は、ARC での自動保持から除外されなくなりました。iOS 5.0 以降では __block の代わりに __weak を使用して、保持サイクルを中断します。

于 2013-02-27T02:31:59.010 に答える