这可能是 iOS 9.3(发行版)中的一个可怕错误。
当添加一个观察者时,[NSUserDefaults standardUserDefaults]
我注意到响应方法-observeValueForKeyPath:ofObject:change:context:
被多次调用。
在下面的简单示例中,每次按下 UIButton 一次,observeValueForKeyPath 触发两次。在更复杂的示例中,它会触发更多次。它仅存在于 iOS 9.3(在 sim 卡和设备上)。
这显然会对应用程序造成严重破坏。其他人有同样的经历吗?
// 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);
}