在TableView中显示和访问数据时更新数据

时间:2011-03-30 14:18:45

标签: iphone database multithreading uitableview core-data

我正在努力找出解决这个问题的最佳方法。 首先,我在UITableView中显示了很多数据。可以通过单击访问这些数据(行的索引允许知道要访问的数据)。 此外,我使用第二个线程更新和添加数据。第二个线程可能会更改数据列表。

问题在于,在某些情况下我可以访问数据(单击一个单元格),但是在我在UITableView中加载它们的那一刻以及我访问它们的那一刻之前它已被修改。它可能导致点击错误的数据或删除的数据,或SegFault ...

为了防止这种情况,我在加载UITableView时创建了一个不可变的数据副本,而UITableView和单元格只引用了副本。

由于我是初学者,我使用 XML和内存(不是CoreData或SQLLite)来管理数据。现在我计划将此体系结构更改为 SQLLite (主要用于持久性)。

我有两个问题:

  • 我可以使用SQLLite或CoreData机制来生成缓存副本(例如临时表)。我是否需要手动完成(从源表中插入到desttable select *中)还是为了我描述的目的而制作了一些东西?
  • 你认为使用临时表是做我想要的好事吗?

感谢您的回答和帮助。

卡里姆

1 个答案:

答案 0 :(得分:1)

CoreData使用NSManagedObjectContext跟踪内存中的所有更改,直到调用save:rollbackreset等方法为止。在单独的线程中,您可以创建另一个NSManagedObjectContext来更新所有数据,但在满足某些同步条件之前不保存任何数据(即,用户不再编辑该表)。满足所有条件后,您可以保存NSManagedObjectContext并重新加载表格。

注意:

使用核心数据的后台线程需要通知主线程更改。

Concurrency with Core Data