КВО сломано в iOS 9.3
Это может быть ужасной ошибкой в iOS 9.3 (выпуск).
При добавлении одного наблюдателя в[NSUserDefaults standardUserDefaults]
Я заметил, что отвечающий метод-observeValueForKeyPath:ofObject:change:context:
называется несколько раз.
В приведенном ниже простом примере каждый раз, когда нажимается UIB-кнопка один раз, наблюдайте, как значение ValueForKeyPath запускается дважды. В более сложных примерах он срабатывает еще больше раз. Он присутствует только на iOS 9.3 (как на симе, так и на устройствах).
Это может нанести ущерб приложению. Кто-нибудь еще испытывает то же самое?
// 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);
}