在模型类中重新加载表

时间:2011-09-05 06:15:06

标签: iphone ios model-view-controller uitableview

我有一个视图类。在这个课程中我有表格视图。在我的模型课中,我制作Asynchrous ASIHTTPRequest。我希望当操作成功在表视图中重新加载数据时。这是做这件事的好方法。我考虑将一个UITableView属性添加到模型类并使用重新加载它。这是好方法吗?

4 个答案:

答案 0 :(得分:2)

我认为您的模型应该通知已更新的te控制器(或使用KVO的其他方式)。然后控制器应该通知视图重新加载。

答案 1 :(得分: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中:您需要取消注册通知:

[[NSNotificationCenter defaultCenter] removeObserver:self];

答案 2 :(得分:1)

如果要重新加载表格视图,可以使用以下方法之一:

  1. 如果您要重新加载所有显示的单元格,则只需拨打[tableView reloadData];即可。请注意,只会重新加载显示的单元格。因此,如果您有10000个单元格,并且只显示了10个单元格,那么只有 10 单元格将被调用方法cellForRowAtIndexPath:

  2. 如果要重新加载特定单元格,则应调用以下UITableView- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation方法,并在第一个操作数列表中提供重新加载。

  3. 如果要重新加载UITableView的整个部分(或部分数量),则应调用- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation并在第一个操作数列表中提供重新加载。

    < / LI>

    希望,它会帮助您选择合适的变体。

答案 3 :(得分:1)

使用synchronous和gcd加载数据。 当接收数据时在主队列上调用[self reload]