2013-01-13 66 views
0

我有一個UIViewController,它顯示從聯機數據庫中提取的數據表。我有一個單獨管理器來處理這個數據的提取提供了表所需的數據。當屬性包含在塊中時,應用程序掛起

這是經理是如何工作的一個例子:

@property (nonatomic) NSArray *dataArray; 
... 
- (void)refreshDataSource 
{ 
    [AClass fetchInBackgroundWithCompletionHandler:^(NSArray *objects) { 
     self.dataArray = [NSArray arrayWithArray:objects]; 
    } 
} 
... 
- (NSArray *)tableViewDataSource 
{ 
    return self.dataArray; 
} 

視圖控制器通過調用-viewDidLoad-refreshDataSource但同時請求更新所指向-tableViewDataSource其提供由管理緩存數據的UITableView 。

當視圖控制器第一次出現時,一切都很好。第二次去展示相同的視圖控制器時,應用程序掛起。網絡請求也不會觸發。

我發現的唯一修復方法是將我的-refreshDataSource調用改爲改爲-viewDidAppear:。但它讓我癢癢,爲什麼會發生這種情況,並且讓我感到不適,因爲這裏的某些事情一定是錯的。

如果任何人可以提供任何幫助或建議,將是偉大的!

+2

我在'dataArray'的'@ property'聲明中看不到'retain'。 –

+1

@ s.bandara在ARC中,strong是對象屬性的默認值 – MaxGabriel

+0

沒錯,我應該提到我的項目正在使用ARC。 – Ricky

回答

0

你的問題並沒有解釋所有的事情,但這裏有幾個想法可以幫助你。

1)viewDidLoad僅在第一次加載視圖時調用。如果你切換到不同的視圖,然後返回到你的tableView,refreshDataSource將不會被調用。

2)viewDidLoad可能在數組被分配和初始化之前觸發,因此在刷新數據時它是零,而viewDidAppear可能沒有相同的問題。

沒有更多的信息,我不能給出更具體的答案。你能否更清楚地解釋「第一次,一切都很好,第二次我去......」如果可能,請逐步執行您的操作。

+0

謝謝羅恩。該陣列似乎在及時初始化。爲了更詳細地瞭解視圖外觀,將VC推入我的導航堆棧。我彈出VC並再次推送它,這是當我的應用程序掛起時。每次我將VC推入堆棧時,都會調用「-viewDidLoad」(如預期的那樣)。 – Ricky

相關問題