我正在努力找出解决这个问题的最佳方法。 首先,我在UITableView中显示了很多数据。可以通过单击访问这些数据(行的索引允许知道要访问的数据)。 此外,我使用第二个线程更新和添加数据。第二个线程可能会更改数据列表。
问题在于,在某些情况下我可以访问数据(单击一个单元格),但是在我在UITableView中加载它们的那一刻以及我访问它们的那一刻之前它已被修改。它可能导致点击错误的数据或删除的数据,或SegFault ...
为了防止这种情况,我在加载UITableView时创建了一个不可变的数据副本,而UITableView和单元格只引用了副本。
由于我是初学者,我使用 XML和内存(不是CoreData或SQLLite)来管理数据。现在我计划将此体系结构更改为 SQLLite (主要用于持久性)。
我有两个问题:
感谢您的回答和帮助。
卡里姆
答案 0 :(得分:1)
CoreData使用NSManagedObjectContext
跟踪内存中的所有更改,直到调用save:
,rollback
或reset
等方法为止。在单独的线程中,您可以创建另一个NSManagedObjectContext
来更新所有数据,但在满足某些同步条件之前不保存任何数据(即,用户不再编辑该表)。满足所有条件后,您可以保存NSManagedObjectContext
并重新加载表格。
注意:强>
使用核心数据的后台线程需要通知主线程更改。