2011-12-30 90 views
1

我對Obj-C編程頗爲陌生,所以請耐心等待。從另一個視圖控制器的內存中查看/查看控制器

我有一個標籤欄。 1個選項卡中有一個表視圖控制器,用於將數據從SQL數據庫獲取到數組中。 在另一個選項卡中,它有一個用於重置所有內容的按鈕(刪除所有數據)。該選項卡的視圖控制器成功刪除了SQL數據庫,但是當返回到表格選項卡時,表格仍充滿了數據。

當從其他視圖控制器按下按鈕時,如何從內存卸載表格視圖控制器?

如果我模擬內存警告,則表格清除並在返回到選項卡時重新生成。這就是我在代碼中所要做的。

感謝

回答

1

我認爲你可以使用NSNotifications來完成這項工作。

在把這個代碼的第一視圖控制器的init方法:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(tableViewDataUpdated:) 
               name:@"DATA_UPDATED" 
               object:nil]; 

創建重新加載包含數據的陣列的tableViewDataUpdated方法,然後對錶視圖調用重新加載。

在第二視圖控制器,當SQL數據庫被清除,呼叫

NSNotification *notification = [NSNotification notificationWithName:@"DATA_UPDATED" object:nil userInfo:nil]; 
    [[NSNotificationQueue defaultQueue] enqueueNotification:notification postingStyle:NSPostASAP]; 
在第一視圖控制器的dealloc方法

最後包括:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
+0

謝謝,這聽起來很有希望。我會盡快嘗試。 – Darren 2011-12-31 08:27:24

+0

我在第一個控制器上創建了一個init,但它從來沒有被調用過。 另外,我必須刪除調用通知的'userInfo'部分,因爲它表示它是未聲明的(我認爲不需要它)。 – Darren 2011-12-31 10:11:52

+0

我得到了它的工作謝謝。 我在ViewWillDisappear中創建通知,並在ViewWillAppear中刪除它。 按下重置按鈕後,它會調用設置數組= nil的通知並重新載入表數據。 謝謝 – Darren 2011-12-31 11:34:15

3

你需要調用reloadDataUITableView

它在內存警告期間被清除,導致視圖控制器每次收到此警告時都會重新創建它自己的視圖(以防當前不可見)。

+0

謝謝,可以添加reloadData到ViewDidAppear? 但在此之前,我需要還釋放NSMutableArray,它存儲從數據庫讀取的表的數據。 如何從另一個ViewController調用array = nil? – Darren 2011-12-30 19:53:35

+0

我最初編寫的問題是如何清除另一個View Controller中的數組。但將其改爲如何卸載視圖,因爲它們取得了相同的結果。 – Darren 2011-12-30 20:55:23

+0

您不需要從不同的視圖控制器釋放數組。一種方法是在第一個視圖控制器中,在viewWillAppear方法(而不是viewDidAppear)中加載數組(如果已經刪除了所有數據,數組將會爲空),然後在表視圖上調用reloadData 。表格視圖應該是空的。 – Darren 2011-12-30 21:36:43