数据导入CoreData期间如何显示progressBar?

Posted

技术标签:

【中文标题】数据导入CoreData期间如何显示progressBar?【英文标题】:How to show progressBar during data import into CoreData? 【发布时间】:2010-11-20 20:59:48 【问题描述】:

我正在将大量数据导入 CoreData。我想显示导入进度的进度条。

首先我要显示进度条。 然后我在数我要导入的数据。 然后我设置了一个 for 循环:

在这个 for 循环中,我首先设置了 coreData 对象。 然后我正在增加进度视图。

在这个循环之后,我保存了 coreData 对象并隐藏了 progressBar。

[self.progressView show];

int allFiles = [file count];
int currentFile = 1;

for(NSString *trackid in file) 
    [entidyDesc setName:[track objectForKey:@"theKey"]];
    float progress = [self convertAmountForProgressBar:currentFile maxNum:allFiles];
    self.progressView.progressBar.progress = progress;


[self.progressView hide];
[self.managedObjectContext save:nil];

(简体)

问题是,progressBar 没有更新。它显示,但在 for 循环完成后首先更新,而不是隐藏。因此,进度条仅在 for 循环之后显示。

任何想法如何解决这个问题?

【问题讨论】:

【参考方案1】:

在另一个线程中进行导入,并使用-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:] 将进度信息发送到主线程。

享受调试并发问题的乐趣。

你也可以用 CATransactions 做一些可怕的事情,但我的印象是 UIKit 应该为你处理所有这些。

【讨论】:

+1 UI 在前端线程。前端线程上的任何长进程,比如一个大循环,都会冻结 UI,直到它完成。【参考方案2】:

您是否尝试过启用线程动画:

- (void)setUsesThreadedAnimation:(BOOL)flag

Apple 的documentation 中的更多信息。

【讨论】:

哦对不起,我不得不说我在 ios 上开发。 ios上有没有类似的东西?

以上是关于数据导入CoreData期间如何显示progressBar?的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常

如何生成 JSON 文件以预加载和导入 coreData?

Swift CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常。

如何在导入数据库期间合并两个 excel 列?

使用 coredata 导入初始数据的方法

在应用升级期间避免 iCloud 同步上的重复数据