Je suis suivi d'une progression avec un UIProgressView
et je place un observateur sur la propriété que je suis en train de suivre.observeValueForKeyPath n'est pas appelé lors du retour à un UIViewController
-je ajouter l'observateur dans le viewWillAppear
, comme ceci:
-(void)viewWillAppear:(BOOL)animated
{
[self addObserver:self forKeyPath:@"progress" options:0 context:nil];
}
Et quand je retire l'observateur dans le viewWillDisappear, comme ceci:
-(void)viewWillDisappear:(BOOL)animated
{
[self removeObserver:self forKeyPath:@"progress"];
}
Et dans la méthode observeValueForKeyPath I mis à jour le vue d'avancement:
-(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];
}
}
Maintenant, quand je quitte ce viewController
et je renvoie le observeValueForKeyPath
n'est pas appelé et je ne reçois pas le progressView
mis à jour en permanence.
Le comportement du progressView selon le code ci-dessus est représenté sur cette vidéo: https://youtu.be/PVRT_Jjtdh4
Votre code semble observer votre viewController par lui-même, dans lequel il n'y a pas besoin d'utiliser KVO. C'est normal si vous ne quittez pas la vue, votre vue d'avancement sera mise à jour. Ce qui perturbe les gens est dans ce cas, vous devez vous préoccuper de vos progrès. Voir quand vous quittez son propriétaire, donc viewController. D'un autre côté, si votre progressView est une vue extérieure de viewController, ce qui doit être vu par viewController, c'est la vue de progression elle-même. – Lane