这是关于阻止句子的问题。我的问题是如何在块句中得到变量。请看我的代码。以下代码效果不佳。
__block NSURL *ssURL
AFJSONRequestOperation *operation =
[AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
ssURL = [NSURL URLWithString:[JSON valueForKeyPath:@"screenshot"]];
[self currentEntry].ogImageURL = ssURL;
NSLog(@"%@", ssURL); // -> "http://correct.address"
} failure:nil];
[operation start];
我还将变量ogImageURL设置如下:
@property (copy, atomic) NSURL *ogImageURL;
完成块后,NSLog显然显示“(null)”。我想在块句之外使用变量。这很奇怪。
我必须从块外部获取变量,因为我想创建表视图,在该表视图中,单元调用以获取数组的自我信息。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
if (indexPath.row < self.itemsArray.count) {
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
UIImageView *imageViewOgImage = (UIImageView *)[cell viewWithTag:5];
NSURL *ogImageURL = [[self.itemsArray objectAtIndex:indexPath.row] ssURL];
完整的来源是第186行:https://github.com/weed/p120711_TechMovie/blob/120723/TechMovie/RSSParser.m
答案 0 :(得分:3)
这不是范围问题,而是时间问题
在第一个示例中,图像视图在块内设置,这意味着它只在ssURL
值设置后发生
在第二个示例中,创建了块,但在设置图像视图之前未调用该块。该块是异步的,因此不会立即调用:它是在从操作返回响应时运行的。如果您是基于JSON请求操作设置图像视图,则必须在设置操作结果后(即在完成块内)完成
如果你的tableview取决于操作的结果,那么设置ssURL的值然后在块内,重新加载表视图
答案 1 :(得分:0)
我假设AFJSONRequestOperation
JSONRequestOperationWithRequest
是一个异步方法,在这种情况下,在第二个示例中,您将self.imageView设置为当时self.ssURL
中的任何值你派遣JSONRequestOperation
。您必须像在第一个示例中那样在成功完成块中设置图像。