2012-08-05 23 views
0

這是關於Block語句的問題。我的問題是如何在塊句中變出來。請看我的代碼。下面的代碼不能很好地工作。Block sentense以外的變量使用

__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顯示 「(空)」 明顯。我想使用塊句子之外的變量。這很奇怪。

我必須從塊外部獲取變量,因爲我想創建表格視圖,在該視圖中單元格調用將自我信息獲取到數組中。

- (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

回答

3

這不是範圍的問題,它是在第一個例子的時序問題

圖像視圖是內部設置塊,這意味着它只發生在ssURL值設置後

在第二個示例中,該塊已創建但在設置圖像視圖之前未調用。該塊是異步的,因此不會立即調用:它在操作返回響應時運行。如果您正在設置基於JSON請求操作的圖像視圖,則必須在設置操作結果後(即,在完成塊內)完成

如果您是tableview取決於操作的結果,然後設置ssURL的值,然後在塊內重新加載表視圖

+0

如何使用'AFJSONRequestOperation'完成塊?我想在塊外做幾件事情。我嘗試過'[waitUntilFinished操作]',但我不太順利。 – weed 2012-08-06 03:16:28

+0

你已經在使用完成塊,那是什麼成功塊是 – wattson12 2012-08-06 07:32:53

+0

謝謝你的建議。我試圖在**和** out **塊中設置'NSLog'函數**。 **在**塊中,「NSLog」功能輸出正確。但是在塊的**外**中,相同的'NSLog'函數輸出'(null)'。我很抱歉打擾你,但如果你有任何想法,請告訴我。 – weed 2012-08-06 09:54:55

0

我假設AFJSONRequestOperationJSONRequestOperationWithRequest是一種異步方法,在這種情況下,在第二個示例中,您將self.imageView設置爲任何值在self.ssURL當您發送JSONRequestOperation。您必須像在第一個示例中那樣在成功完成塊中設置圖像。

+0

如何使用'AFJSONRequestOperation'完成塊?我想在塊外做幾件事情。我嘗試過'[waitUntilFinished操作]',但我不太順利。 – weed 2012-08-06 03:17:42

+0

你可以調用另一種方法。 – jgh 2012-08-06 17:09:03