iphone - 如何在数据导入 CoreData 时显示 progressBar?

标签 iphone objective-c core-data ios uiprogressbar

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

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

  • 在这个 for 循环中,我首先设置了 coreData 对象。
  • 然后我递增进度 View 。

在此循环之后,我将保存 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 循环后不久出现。

有什么办法解决这个问题吗?

最佳答案

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

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

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

关于iphone - 如何在数据导入 CoreData 时显示 progressBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4234991/

相关文章:

iphone - 如何在运行时注册/注销协议(protocol)?

iphone - 显示另一个 ViewController

cocoa - 当对象从 NSOperations 添加到托管对象上下文时,NSOutlineView 不刷新

ios - 操作无法完成。 ( cocoa 错误 133021。)+ swift 2

core-data - 使用 CoreData 预览 ContentView

ios - 警告 : Attempt to present <UIImagePickerController: 0x7ca5dc00> on <UIViewController: 0x7b9cac00> which is already presenting (null)

ios - AVAudioRecorder.record() 在 iOS 8 中总是返回 "false"

objective-c - Xcode 创建和使用带有链接错误的静态库

objective-c - 核心数据、iVar 和类别

objective-c - 属性/字段线程同步