iOS9.3でobserveValueForKeyPathが2度呼ばれる話
昨日公開されたiOS9.3の話。まずはコードを。
- (void)buttonTapped:(id)sender { NSLog(@"buttonTapped"); NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"1" forKey:@"hogehogehoge"]; [defaults synchronize]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [btn1 addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; [btn1 setFrame:CGRectMake(0, 20, 100, 44)]; [btn1 setTitle:@"test" forState:UIControlStateNormal]; [self.view addSubview:btn1]; NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [defaults addObserver:self forKeyPath:@"hogehogehoge" options:0 context:nil]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"hogehogehoge"]) { NSLog(@"observeValueForKeyPath object = %@ change = %@ context = %@", object, change, context); } }
で実行結果
iOS9.2
016-03-23 17:54:44.916 ios93Test[11457:4534369] buttonTapped 2016-03-23 17:54:44.920 ios93Test[11457:4534369] observeValueForKeyPath object = <NSUserDefaults: 0x13ed06d90> change = { kind = 1; } context = (null) 2016-03-23 17:55:00.574 ios93Test[11457:4534369] buttonTapped 2016-03-23 17:55:00.575 ios93Test[11457:4534369] observeValueForKeyPath object = <NSUserDefaults: 0x13ed06d90> change = { kind = 1; } context = (null)
iOS9.3
2016-03-23 18:07:19.694 ios93Test[1467:322189] buttonTapped 2016-03-23 18:07:19.697 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = { kind = 1; } context = (null) 2016-03-23 18:07:19.698 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = { kind = 1; } context = (null) 2016-03-23 18:07:23.509 ios93Test[1467:322189] buttonTapped 2016-03-23 18:07:23.509 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = { kind = 1; } context = (null) 2016-03-23 18:07:23.509 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = { kind = 1; } context = (null)
なーぜか、2回呼ばれる。
UnityのPlayerPrefsから来る時も2回。
さてググっても全くヒットしないのですが、僕だけでしょうか・・