1

问题

我有UITableView一个控制器在收到NSNotification. 表刷新时,cellForRowAtIndexPath使用的数据结构可能会发生变化。datasource

背景

每当应用程序的数据模型更改时,NSNotification就会触发一个,并且我UITableViewController的处理datasourceUITableView会收到通知执行一个“ refreshReload”方法。" refreshReload" 方法从模型中检索新数据,然后请求[tableView reloadData]. 这是类 MVC 模式,其中模型被更改,控制器被通知并且视图被更新。当有快速通知背靠背快速更改数据时,应用程序崩溃。我觉得在表调用的同时cellForRowAtIndexPath:包含数据的数据结构在执行过程中发生了变化。

什么是避免这种情况的好模式,有没有办法停止重新加载表,以便我可以先执行停止然后更改datasource

4

2 回答 2

1

如果我正确理解您的问题,我会使用全局标志来锁定数据更改。

例如,使用singleton模式来保存您的标志值。检查标志是否被锁定。如果标志被锁定,请不要调用或禁用数据更改方法。当 UITableView 更新时,锁定标志直到更新完成。

于 2013-09-02T08:08:53.057 回答
0

如果数据更改非常频繁,即在时间表正在更新并且表得到另一个重新加载调用,则会发生崩溃。

要解决应用程序中的崩溃问题:

您可以做的第一件事是避免频繁调用重载表。维护一个标志(在您为接收通知而设置的通知观察者方法中),该标志告诉该表现在需要重新加载,当用户来到此表视图屏幕时,您创建一个计时器,该计时器将在(例如)每一分钟后调用一个方法。在该方法中,检查 flag ,如果是,则重新加载表并将 Flag 值更改为 NO ,否则您无需执行任何操作。

我希望这肯定能解决你的问题。

于 2013-09-02T13:37:34.937 回答