Uiview UIProgressView在我的应用加载其资源时未更新

Uiview UIProgressView在我的应用加载其资源时未更新,uiview,uiprogressview,Uiview,Uiprogressview,在长时间的资源加载过程中,我试图更新UIView中的UIProgressView进度条。假设我正在从一个NIB文件加载一堆位图(可能有一百个)。加载10后,我向UIProgressView发出.progress,该视图是已经显示的UIView的一部分。因此,我提出: myView.myProgressView.progress=0.2; 然后,我加载另外10个位图,并发布: myView.myProgressView.progress=0.4; 等等。当应用程序运行时,进度条不会前进。它只是

在长时间的资源加载过程中,我试图更新UIView中的UIProgressView进度条。假设我正在从一个NIB文件加载一堆位图(可能有一百个)。加载10后,我向UIProgressView发出.progress,该视图是已经显示的UIView的一部分。因此,我提出:

myView.myProgressView.progress=0.2;
然后,我加载另外10个位图,并发布:

myView.myProgressView.progress=0.4;

等等。当应用程序运行时,进度条不会前进。它只是停留在初始位置。冒着听起来像个十足的白痴的风险,我是否必须将我的资源加载到一个单独的线程上,这样操作系统才能更新UI,或者,有没有更简单的方法?谢谢您的帮助。

是的。将它们加载到单独的线程上。或者只需使用类似于
性能选择器

[self performSelector:@selector(setProgressBar) withObject:nil afterDelay:0.0];

(并创建一个
setProgressBar
函数,该函数从成员变量读取当前值并更新UI)

您可以在每次更新UI后运行runloop的一个步骤:

SInt32 result;
do {
    result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE);
} while(result == kCFRunLoopRunHandledSource);

它可能会产生其他不良后果(例如,使用户能够与UI交互,在应该执行视图控制器之前执行视图控制器的委托,如
viewdideappear
,等等),因此请非常、非常小心。

嗨,Marcc,我尝试了您的performSelector方法,但没有成功。setProgressBar方法在我的所有其他代码完成后被调用。我甚至没有尝试更新UIProgressView。我只是在setProgressBar中放了一个NSLog,在所有其他资源加载方法之后,它就出现在控制台上。还有其他建议吗?你能给我指一个在另一个线程上做这些事情的参考吗?哎呀。因此,这个想法是正确的,您需要更新一个线程上的数据,而不是在执行时阻塞主线程(UI线程)。我认为如果采用这种方法,实际上需要使用performSelectorOnMainThread(在开发人员站点中搜索此方法的文档)。