从模型中自动/定时重载tableView?

时间:2010-12-06 18:50:24

标签: iphone objective-c cocoa-touch

我正在开发一个使用单例数据模型的应用程序和两个使用UITabBarController配置的控制器(一个是mapView,另一个是tableView)。我在mapView上设置了一个委托来获取CLLocation数据并将其添加到数据模型中的NSMutableArray。我想将这些数据作为单元添加到tableView,我通过共享模型访问数据,这不是问题。我的问题是:

(1)有没有办法在新数据进入模型时自动更新tableView(NSMutableArray)?

编辑:

我一直在考虑这个问题,它让我觉得我应该使用模型作为CLLoctionManager的委托,将数据存储在NSMutableArray中,如上所述。这样,MapView和TableView都可以访问数据。任何人都可以帮我重新加载tableView,有没有自动/计时器方式来做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以通过注册包含tableView for views的视图来完成此操作。

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

然后实现你的选择器:

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

现在,在添加数据的类中,您发布了添加新数据的通知。

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

答案 1 :(得分:2)

首先,在UITableView上有一个reloadData方法,你可以使用它来强制它重新加载它的数据。

但是作为一个建议,不是使用计时器,而是为什么不将您自己的协议/委托作为模型类的一部分来实现。 (这是关于using custom delegates in Objective-C的一个非常好的教程,虽然从内存中我认为它在某个地方省略了[someObject setDelegate:self]。)

您可以使负责表的视图控制器查看模型的委托,这将通知视图控制器基础数据已更改并且需要重新加载。然后视图控制器可能会通知用户(旋转轮“开心”等)并根据需要在桌面上调用reloadData。