从数据库中获取记录时显示空表视图
Posted
技术标签:
【中文标题】从数据库中获取记录时显示空表视图【英文标题】:show empty tableview while fetching records from database 【发布时间】:2013-04-17 14:27:15 【问题描述】:我有一个表视图,在-(void)tableView: didSelectRowAtIndexPath:
上,我正在从 sqlite 数据库中获取记录并显示在另一个 detailViewController 的表视图上。获取记录时 UI 卡住了。我必须显示 detailViewController 的空 tableView
在点击带有活动指示器的行,直到所有记录都没有从数据库中获取。但问题是当我调用函数从 -(void)viewDidLoad
从数据库中获取记录时,主运行循环被阻塞出现 detailViewController 和黑屏。
我在某处读过在后台线程上执行数据库操作不好。所以我不能在后台线程上执行获取操作。
解决此问题的最佳方法是什么?
detailViewController的视图更新时如何显示记录。有什么好的设计模式或者在后台线程上执行数据库操作是否正确?在viewDidAppear中进行诸如数据库操作之类的繁重操作也可以吗?
提前致谢
【问题讨论】:
【参考方案1】:在viewWillAppear
方法中从数据库中获取记录并将其放入NSMutableArray
并使用NSLog(@"%@",myMutableArr);
进行检查,如果您获得正确的数据然后放入UITableView
参考This Tutorial 和This is official document.
【讨论】:
【参考方案2】:我认为在不同的线程上加载数据库不是问题。但是如果你想用你的数据库结果更新表视图,使用方法 performSelectorOnMainThread。由于 UI 更新应该始终在主线程中。
表视图是否需要来自数据库的结果?还是只针对detailView? 如果只针对detailView,为什么不在detailView出现时查询数据库呢?
【讨论】:
是的 detailViewController 用这些结果加载它的 tableview 然后您可以在单独的线程中查询数据库,在viewDidAppear和unload方法中管理线程,并在您读取部分或全部数据时不时更新tableview。我做到了,它在我的应用程序itunes.apple.com/app/id483162196 中完美运行。以上是关于从数据库中获取记录时显示空表视图的主要内容,如果未能解决你的问题,请参考以下文章
DataGridView 绑定到已键入的 DataTable 时显示空单元格