我在我的xcode项目中使用NSProgressIndicator(Mac OS X,而不是iOS)。我正在尝试异步下载文件,同时在进度指示器上显示下载进度。在我的项目中,单击更新按钮开始下载。每次收到数据后,都会更新进度,并调用app委托中的update_progress方法。
从NSLogs可以看到,进度值被传递给该方法。在具有此值的进度指示器上使用setDoubleValue无效。但是,使用静态值(例如setDoubleValue:50.0f)会更新进度指示器。
在.m中,loadData方法开始下载。在这里,您可以设置保存文件的位置(self.strFileNameWithPath),以及下面的几行,即从中下载文件的位置。我只是使用了一个2.5mb的文件,虽然小但是足够大,可以进行一些下载步骤。
在界面中,单击“更新”按钮开始下载。当收到块时,控制台将显示进度更新。
有人知道为什么会发生这种情况的原因,以及我如何解决这个问题? 提前谢谢!
编辑:不一致的方法是:
- (void)update_progress:(float)value{
double thevalue = (double)value;
NSLog(@"value: %f",thevalue);
[self.progress_indicator setDoubleValue:thevalue];
NSLog(@"Prgoress: %f",[self.progress_indicator doubleValue]);
}
在每个进度步骤中,值显示正确的进度值,但进度指示器不响应setDoubleValue,因为第二个NSLog返回0.0。
以下是控制台显示的内容:
value: 2.770802
Prgoress: 0.000000
value: 22.662386
Prgoress: 0.000000
value: 69.881004
Prgoress: 0.000000
答案 0 :(得分:0)
问题是我的init方法,下载器实现中的以下内容修复了它:
- (id)init{
self = [super init];
if (self) {
appdelegate = [[NSApplication sharedApplication] delegate];
}
return self;
}
为了快速编码尝试某些东西,我觉得很傻......