嗨我需要在sqlite中插入数据库时更新我的进度条进度,因为它需要5分钟。
但是当数据库插入时,ui会挂起,我无法再进行操作。我使用 此方法更新进度条
-(void)setProgress:(float)progress
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,
(unsigned long)NULL), ^(void) {
[progressview setProgress:progress animated:YES];
});
}
因此,请建议我在数据库插入时更新进度条的方法
答案 0 :(得分:0)
UI正在挂起,因为您可能正在主线程中进行数据库插入。
因此更改数据库插入方法调用如:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
//call the database insertion method here
});
如果要从该方法更新进度条,请将其命名为:
dispatch_sync(dispatch_get_main_queue(), ^{
[progressview setProgress:progress animated:YES];
});
永远不要从其他线程更新UI元素,只从主线程更新它。
答案 1 :(得分:0)
请阅读我关于使用后台管理对象上下文的文章:http://www.cocoanetics.com/2012/07/multi-context-coredata/
您可以从后台队列发送有关进度的通知,然后在主线程上发送进度条更新的dispatch_async。