UITableView数据源/重新加载竞争条件

时间:2013-09-02 07:57:33

标签: ios objective-c uitableview

问题

我有一个UITableView,一旦收到NSNotification,就会被控制器重新加载。在表刷新时,cellForRowAtIndexPath用作datasource的数据结构可能会发生变化。

背景

每当应用的数据模型发生变化时,NSNotification都会被触发,处理UITableViewController的{​​{1}}的{​​{1}}会被通知执行&# 34; datasource"方法。 " UITableView" method从模型中检索新数据,然后请求refreshReload。这是类MVC模式,其中模型被更改,控制器得到通知并且视图得到更新。当快速通知背靠背快速更改数据时,应用程序崩溃。我觉得当表调用refreshReload时:包含数据的数据结构在执行期间会发生变化。

要避免这种情况需要遵循的好模式,有没有办法停止重新加载表格,以便我可以先执行停止然后更改[tableView reloadData]

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果数据频繁更改,即在表更新时,表将获得另一次重新加载调用,则会发生崩溃。

解决应用中的崩溃问题:

你可以做的第一件事是避免频繁调用重载表。保持一个Flag(在你为接收通知设置的Notification observer方法中),该标志告诉表现在当用户进入这个tableview屏幕时你需要重新加载你创建一个定时器,它会在每隔一分钟之后调用一个方法。在该方法中,检查标志,如果是,则重新加载表并将标志值更改为否,否则您无需执行任何操作。

我希望这肯定会解决您的问题。