我有2个视图控制器。在父视图中,我有一个进度视图。在子VC中,我使用POST请求将带有参数的图像上传到服务器,然后解除该VC并因此返回到父VC,我希望进度View在上载发生时更新。我尝试过protocol-delegate方法,但看起来它只能工作一次并且无法动态返回值。我尝试在两个视图控制器中实现以下方法,但没有成功。
func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
self.progressView.hidden = false
self.uploadProgress = Float(totalBytesSent) / Float(totalBytesExpectedToSend)
print(self.uploadProgress)
self.progressView.setProgress(self.uploadProgress, animated: true)
if (uploadProgress == 1.0) {
self.progressView.hidden = true
// uploadProgress = 0.0
}
}
答案 0 :(得分:0)
查看KVO(键值观察)并观察您的self.uploadProgress
。每次self.uploadProgress
更改时,都会调用一个函数,然后您就可以执行任何操作。确保在想要显示进度条的VC上添加观察者(函数)。
例如在ParentVC中:
[childVC addObserver:self forKeyPath:@"uploadProgress" options: NSKeyValueObservingOptionNew context:NULL];
然后:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"uploadProgress"]) {
NSLog(@"Updated Value:%@",[change objectForKey:NSKeyValueChangeNewKey]);
//Do something
}
}
每次uploadProgress属性更改时都会调用observeForValue。
如果您不需要观察员或者ChildVC将被销毁,请不要忘记删除观察者。
-(void)dealloc {
[self removeObserver:parentVC forKeyPath:@"uploadProgress"];
}