這是我第一次嘗試iPhone開發,我有一些UITableViewController
將顯示從web服務返回的數據。在[tableview reloadData]之前重新加載UITableViewController的模型
在我的AppDelegate中,我設置了一個計時器,每隔幾秒鐘調用一次並重新加載模型。我保留相同的對象引用,只是刷新它的內容,所以我在目前可見的任何UITableViewController
上都有相同的對象。
當數據在AppDelegate中刷新,我呼籲:
[[(UITableViewController *)[self.navigationController topViewController] tableView] reloadData];
的模式基本上file
對象的集合。每個file
對象都有一些屬性和標誌。
如果當前的UITableViewController
是一個簡單的表,其中一個部分將每個單元映射到files
的Array上的順序索引,則此方法運行良好。
但我有一個UITableViewController
s顯示此file
的細節,根據file
對象上的標誌,將顯示2或3個部分。我在這裏把這個邏輯:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if ([[_file status] intValue] & DOWNLOADING) {
kIndexTransferSpeed = 1;
kIndexSettings = 2;
return 3;
} else {
kIndexSettings = 1;
kIndexTransferSpeed = -1;
return 2;
}
}
所以這個控制器上,我-tableView:cellForRowAtIndexPath:
只是一個大if
語句,將顯示來自_file
對象的屬性,取決於indexPath
。
這種方法的問題是,當該表在設備上重新加載時,我實際上可以看到它正在重新加載。章節標題閃爍片刻,單元格稍微顯示出來。特別是如果我在重新加載時滾動表格。
我讀過的地方,我應該保持自己不要把這些UITableViewController
方法的任何邏輯。但我該怎麼辦?
我曾考慮過創建一個「數據視圖模型」的具體方法,該數據已準備好供- tableView:cellForRowAtIndexPath:
使用,並且在調用它的[tableView reloadData]之前由AppDelegate調用。但是,每次調用它時,我都必須重新創建這個「視圖模型」,因爲它是同一個對象,我不知道數據模型中發生了什麼變化。
謝謝!因此,在-viewWillAppear上:我可以創建一個「視圖模型」NSMutableArray,當AppDelegate刷新數據時,我可以創建一個更改列表並在我的控制器上調用-refreshModel,該控制器處理適當的動畫,重新顯示選定的行。那是對的嗎? – leolobato 2009-07-23 15:37:53