oms*_*sid 4 iphone cocoa-touch uikit uiprogressview
我有我的主线程,我称之为加载数据的方法(需要一段时间).我用performSelectorInBackground调用此方法并传递委托.数据加载方法定期回调以更新进度,它调用最初在后台启动它的同一控制器类中的方法(委托).这个方法看起来像:
-(void)loadingProgress:(float)progress{
NSLog(@"Progress %f", progress);
myProgressView.progress = progress;
}
Run Code Online (Sandbox Code Playgroud)
所以我知道该方法正在被调用和运行,因为我得到了日益增加的进度值的日志读数,但进度指示器没有移动.我发现的所有内容都声明确保主线程可以自由更新视图,但NSLog运行的事实并不意味着它是免费的吗?这是怎么回事?
Mat*_*uch 11
你必须更新主线程上的用户界面元素.因此,你必须稍微改变你的方法,因为你必须在使用时使用对象performSelectorOnMainThread:withObject:waitUntilDone:
您的方法应如下所示:
-(void)loadingProgress:(NSNumber *)nProgress{
float progress = [nProgress floatValue];
NSLog(@"Progress %f", progress);
myProgressView.progress = progress;
}
Run Code Online (Sandbox Code Playgroud)
你用它来称呼它:
[delegate performSelectorOnMainThread:@selector(loadingProgress:) withObject:[NSNumber numberWithFloat:progress] waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3714 次 |
| 最近记录: |