【发布时间】:2017-06-21 02:03:33
【问题描述】:
我正在使用UIProgressView 跟踪进度,并为我正在跟踪的属性设置了一个观察者。
我在viewWillAppear中添加观察者,像这样:
-(void)viewWillAppear:(BOOL)animated
{
[self addObserver:self forKeyPath:@"progress" options:0 context:nil];
}
当我在 viewWillDisappear 中移除观察者时,像这样:
-(void)viewWillDisappear:(BOOL)animated
{
[self removeObserver:self forKeyPath:@"progress"];
}
在 observeValueForKeyPath 方法中我更新了进度视图:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
if([keyPath isEqualToString:@"progress"])
{
[self.progressView setProgress:self.progress animated:YES];
}
}
现在,当我离开 viewController 并返回时,observeValueForKeyPath 没有被调用,我也没有得到 progressView 的持续更新。
根据上面的代码,progressView 的行为如下视频所示: https://youtu.be/PVRT_Jjtdh4
【问题讨论】:
-
您的代码似乎在自己观察您的viewController,其中不需要使用KVO。如果您不离开视图,这是预期的,您的进度视图将被更新。让人们感到困惑的是,在这种情况下,当你离开它的所有者时,你必须关心你的 progressView,因此离开 viewController。另一方面,如果你的progressView是viewController的外层视图,那么需要观察viewController的是progressView本身。
标签: ios objective-c key-value-observing uiprogressview viewwillappear