0

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

所以请建议我在数据库插入进行时更新进度条的方法

4

2 回答 2

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 元素,只从主线程更新它。

于 2013-01-02T06:02:39.713 回答
0

请阅读我关于使用后台托管对象上下文的文章:http: //www.cocoanetics.com/2012/07/multi-context-coredata/

您可以从后台队列发送有关进度的通知,然后在主线程上 dispatch_async 更新进度条。

于 2013-01-02T06:44:25.253 回答