KVO in iOS 9.3 kaputt

Dies ist möglicherweise ein schrecklicher Fehler in iOS 9.3 (Release).

Wenn ein einzelner Beobachter zu @ hinzugefügt wi[NSUserDefaults standardUserDefaults] Ich habe festgestellt, dass die Antwortmethode-observeValueForKeyPath:ofObject:change:context: wird mehrfach aufgerufen.

Im folgenden einfachen Beispiel wird observValueForKeyPath jedes Mal, wenn ein UIButton einmal gedrückt wird, zweimal ausgelöst. In komplizierteren Beispielen wird es noch öfter ausgelöst. Es ist nur unter iOS 9.3 verfügbar (sowohl auf der SIM-Karte als auch auf den Geräten).

Dies kann offensichtlich Chaos in einer App anrichten. Hat noch jemand dasselbe erlebt?

// ViewController.m (barebones, single view app)

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewDidLoad");
    [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:@"SomeKey" options:NSKeyValueObservingOptionNew context:NULL];
}

- (IBAction)buttonPressed:(id)sender {
    NSLog(@"buttonPressed");
    [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"SomeKey"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    NSLog(@"observeValueForKeyPath: %@", keyPath);
} 

Antworten auf die Frage(6)

Ihre Antwort auf die Frage