我正在跟蹤UIProgressView
的進度,並將觀察者設置爲正在跟蹤的屬性。observeValueForKeyPath在返回到UIViewController時未被調用
我添加觀察者在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本身。 – Lane