即使主线程运行正常,UIProgressView也不会更新

时间:2011-03-08 19:14:44

标签: iphone cocoa-touch uikit uiprogressview

我有我的主线程,我调用一个加载数据的方法(需要一段时间)。我用performSelectorInBackground调用此方法并传递委托。数据加载方法定期回调以更新进度,它调用最初在后台启动它的同一控制器类中的方法(委托)。此方法如下所示:

-(void)loadingProgress:(float)progress{
    NSLog(@"Progress %f", progress);
    myProgressView.progress = progress;
}

所以我知道该方法正在被调用并运行,因为我得到了日益增加的进度值的日志读数,但进度指示器没有移动。我发现的所有内容都声明确保主线程可以自由更新视图,但NSLog运行的事实并不意味着它是免费的吗?发生了什么事?

1 个答案:

答案 0 :(得分:11)

您必须更新主线程上的用户界面元素。因此,您必须稍微改变一下方法,因为在使用performSelectorOnMainThread:withObject:waitUntilDone:

时必须使用对象

您的方法应如下所示:

-(void)loadingProgress:(NSNumber *)nProgress{
    float progress = [nProgress floatValue];
    NSLog(@"Progress %f", progress);
    myProgressView.progress = progress;
}

你用它来称呼它:

[delegate performSelectorOnMainThread:@selector(loadingProgress:) withObject:[NSNumber numberWithFloat:progress] waitUntilDone:NO];