我正在开发一个使用单例数据模型的应用程序和两个使用UITabBarController配置的控制器(一个是mapView,另一个是tableView)。我在mapView上设置了一个委托来获取CLLocation数据并将其添加到数据模型中的NSMutableArray。我想将这些数据作为单元添加到tableView,我通过共享模型访问数据,这不是问题。我的问题是:
(1)有没有办法在新数据进入模型时自动更新tableView(NSMutableArray)?
我一直在考虑这个问题,它让我觉得我应该使用模型作为CLLoctionManager的委托,将数据存储在NSMutableArray中,如上所述。这样,MapView和TableView都可以访问数据。任何人都可以帮我重新加载tableView,有没有自动/计时器方式来做到这一点?
答案 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。