在iPhone中进行数据库插入时更新进度条

时间:2013-01-02 05:38:36

标签: iphone objective-c ios

嗨我需要在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];
    });
}

因此,请建议我在数据库插入时更新进度条的方法

2 个答案:

答案 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。