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

时间:2010-11-20 20:59:49

标签: iphone objective-c core-data ios uiprogressbar

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

首先我要显示进度条。 然后我在计算我要导入的数据。 然后我设置了一个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循环后显示为短。

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

2 个答案:

答案 0 :(得分:2)

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

有趣地调试并发问题。

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

答案 1 :(得分:0)

您是否尝试使用以下方式启用线程动画:

- (void)setUsesThreadedAnimation:(BOOL)flag

更多Apple的documentation