【发布时间】:2011-03-30 14:18:44
【问题描述】:
我正在尝试找出解决此问题的最佳方法。 首先,我在 UITableView 中显示了很多数据。这些数据可以通过点击访问(行的索引允许知道访问哪些数据)。 此外,我使用第二个线程更新和添加数据。第二个线程可以更改数据列表。
问题在于,在某些情况下,我可以访问数据(单击单元格),但在我将它们加载到 UITableView 和访问它们的那一刻之间,它已经被修改了。它可能导致点击错误的数据或已删除的数据,或 SegFault...
为了防止这种情况,我在加载 UITableView 时制作了一个不可变的数据副本,而 UITableView 和单元格仅引用该副本。
作为初学者,我使用 XML 和内存(不是 CoreData 或 SQLLite)来管理数据。现在我计划改变这个架构以使用 SQLLite(主要是为了持久性)。
我有两个问题:
- 我能否使用 SQLLite 或 CoreData 机制来生成缓存副本(例如临时表)。我是否需要手动执行(插入到 desttable select * from sourcetable)或者是否有为我描述的目的而制作的东西?
- 您认为使用 临时表 是做我想做的事的好方法吗?
感谢您的回答和帮助。
卡里姆
【问题讨论】:
-
您的问题涵盖了我认为您应该尝试解耦的几个问题,例如不要将 UITableView(用户可见表)与数据库表混淆。修改数据的后台线程的性质是什么?它是从 ui 表中删除行还是附加它们?
-
实际上第二个线程并没有改变tableview。为了简单起见:表格显示新闻提要,应用程序的全局新闻列表由第二个线程填充。重新加载 tableview 是通过用户操作完成的......
-
战争新闻:使用 Core Data 和填充两个不同上下文的两个线程非常有效。请记住,第二个线程必须通知主线程 CD 更新!
标签: iphone database multithreading uitableview core-data