2011-06-12 44 views
0

如何在塊範圍內的對象之外設置塊之外的對象?在塊範圍內使用對象設置塊之外的對象

我的代碼目前是這樣的,但當我打電話給NSLog(@"%d", [self publicFeed] count])時,它不起作用。

- (NSArray *) publicFeed { 
    __block NSArray *returns = nil; 
    [[APIRequester sharedRequester] getPublicFeedCompletion:^(NSArray *array) { 
     returns = array; 
    } fail:^(NSError *error) { 

    }]; 
    return returns; 
} 
+1

您是否使用失敗區塊來檢查錯誤並查看發生了什麼? – 2011-06-12 00:57:55

+0

我對APIRequester類進行了編碼,並且沒有錯誤... – 2011-06-12 01:00:19

+2

首先,前面帶'get'的方法意味着Objective-C/Cocoa中非常具體的東西,這不是它;放下'get'。其次,如果你創建只有一個塊參數的方法,你的API將會更加愉快。上面的代碼中的錯誤處理塊是噪聲;它幾乎肯定需要來自完成塊的狀​​態,因此,將兩者分開只會增加複雜性。 – bbum 2011-06-12 02:31:09

回答

3

問題出在這裏。塊被調用,你會發現,但這是會發生什麼:

  1. 聲明returns作爲數組。請致電-[APIRequester getPublicFeedCompletion:fail:]
  2. 方法返回returns(它是nil)。
    ~~~~~
  3. 在未來的某個時間,returns設置爲array

您必須以某種方式更改您的代碼,以確保在方法返回之前設置了returns

+1

有什麼選擇?使API調用同步? – 2011-06-12 01:07:00

+2

這將是一種方式。另一種方法是讓完成模塊與任何關心返回值改變的人通信。 – bbum 2011-06-12 02:31:50

+0

我該怎麼做?這將是在操作中的方法。 – 2011-06-12 13:03:22