2011-09-05 20 views
1

我有一個視圖類。在這個課上,我有桌子視圖。在我的模型類中,我製作了Asynchrous ASIHTTPRequest。我希望操作成功時可以在表視圖中重新加載數據。這是做這件事的好方法。我考慮添加一個UITableView屬性來爲類建模並使用重新加載它。這是一個好方法嗎?模型類中的重載表

+0

只需調用'UITableView'的'reloadData'方法... – esqew

+0

從哪裏可以調用此方法?從模特課上? –

+0

難道你只想'[self.tableView reloadData];'一旦你的操作成功了嗎? – msgambel

回答

2

當您的模型發佈通知到NSNotificationCenter時,您的表格查看註冊此通知,reloadData收到一個通知。

內部模型,發生更改時:

[[NSNotificationCenter defaultCenter] postNotificationName:@"uniqueNotificationName" 
                object:self]; 

裏面你的表視圖控制器,在viewDidAppear註冊通知,例如:

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

並實行methodToCall:

- (void)methodToCall:(NSNotification *)notification { 
    [self.tableView reloadData]; 
} 

當您完成表視圖時,例如在viewWillDisappear中:yo你需要取消註冊通知:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
1

當你要重新加載表中查看你可以使用這個方法之一:

  1. 如果你想重新加載所有顯示單元那麼你可以調用[tableView reloadData];。注意,只有顯示的單元格將被重新加載。因此,例如,如果您有10000個單元格並且只顯示其中10個單元格,則將僅調用cellForRowAtIndexPath:單元格的單元格。

  2. 如果你想重新加載特定的單元格,那麼你應該調用以下方法UITableView- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation並在第一個操作數列表中提供要重新加載的單元格。

  3. 如果你想重新加載UITableView的整個部分(或者部分的數量),那麼你應該調用- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation並在第一個操作數列表中提供要重新加載的部分。

希望它能幫助您選擇合適的變體。

+0

感謝您的信息,但我應該在哪裏調用其中一種方法? –

+0

你有什麼變種? – Nekto

+0

模型類或控制器類 –

2

我認爲你的模型應該告知已更新的控制器(或其他方式使用KVO)。控制器然後應該消息視圖重新加載。

1

使用同步和gcd來加載數據。 當在主隊列中接收數據調用[自加載]時