2010-12-06 15 views
0

我正在使用一個單例數據模型和兩個控制器(一個mapView和另一個tableView)的應用程序,這兩個控制器都使用UITabBarController進行配置。我已經在mapView上設置了一個委託來獲取CLLocation數據並將其添加到數據模型中的NSMutableArray。我想將這些數據作爲單元格添加到tableView中,我通過共享模型訪問數據,所以這不是問題。我的問題是:從模型中自動/定時重載tableView?

(1)有沒有辦法自動更新tableView作爲新的數據進入模型(NSMutableArray)?

編輯:

我剛纔一直在想這個,它看起來對我來說,我應該使用模型爲代表的CLLoctionManager,將數據存儲在NSMutableArray裏就像我上面詳述。這樣MapView和TableView都可以訪問數據。任何人都可以幫我重新加載tableView,有沒有自動/定時器的方式來做到這一點?

回答

2

首先,在UITableView上有一個reloadData方法,您可以使用它來強制它重新加載其數據。

然而,作爲一個建議,而不是使用計時器,爲什麼不實施您自己的協議/委託作爲您的模型類的一部分。 (這裏有using custom delegates in Objective-C一個很好的教程,雖然從內存我認爲它省略了[someObject setDelegate:個體經營]。沿途某處)

你可以做的視圖控制器這是負責表查看委託您的模型,它會通知視圖控制器底層數據已更改,並且需要重新加載。然後,視圖控制器可能會通知用戶(紡車'o'快樂等),並根據需要在表上調用reloadData。

+0

大加讚賞,你都回答我的問題,並給了我一個小回味無窮,謝謝。 – fuzzygoat 2010-12-06 19:53:40

+0

@fuzzygoat - 很樂意幫忙。 :-) – 2010-12-06 19:54:21

3

你可以通過註冊包含tableView通知的視圖來實現。在其中添加數據的類

- (void)yourSelector:(NSNotification *)notification { 
     [self.tableView reloadData]; 
    //do something 
} 

現在,您發佈添加新數據的通知:

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

然後實現你的選擇。

[[NSNotificationCenter defaultCenter] postNotificationName:@"addedData" 
             object:nil];