observeValueForKeyPath called twice when changing NSUserDefaults value
observeValueForKeyPath called twice when changing NSUserDefaults value
- Subject: observeValueForKeyPath called twice when changing NSUserDefaults value
- From: Steve Mills <email@hidden>
- Date: Sun, 13 Nov 2016 15:00:26 -0600
I've added an observer for an NSUserDefaults keyPath. This causes observeValueForKeyPath: to be called twice. Here's the call stack for the first call, starting from the setObject call (I'm actually calling setBool):
#0 0x0000000100007130 in -[AppDelegate observeValueForKeyPath:ofObject:change:context:] at /Users/tut/Projects/ButTunes/ButTunes/AppDelegate.m:505
#1 0x00007fffa196edbd in NSKeyValueNotifyObserver ()
#2 0x00007fffa196e654 in NSKeyValueDidChange ()
#3 0x00007fffa193d536 in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] ()
#4 0x00007fffa0011825 in __47-[CFPrefsSource didChangeValues:forKeys:count:]_block_invoke ()
#5 0x00007fffa001166a in forEachObserver ()
#6 0x00007fffa001178c in -[CFPrefsSource didChangeValues:forKeys:count:] ()
#7 0x00007fffa00113cf in -[CFPrefsSource setValues:forKeys:count:removeValuesForKeys:count:] ()
#8 0x00007fff9fef5550 in -[CFPrefsSource setValues:forKeys:count:] ()
#9 0x00007fff9ff3e71a in -[CFPrefsSource setValue:forKey:] ()
#10 0x00007fffa00606a2 in __108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke ()
#11 0x00007fffa0060519 in -[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:] ()
#12 0x00007fffa008c955 in -[_CFXPreferences setValue:forKey:appIdentifier:container:configurationURL:] ()
#13 0x00007fff9ff3e664 in _CFPreferencesSetAppValueWithContainer ()
#14 0x00007fffa1964bbf in -[NSUserDefaults(NSUserDefaults) setObject:forKey:] ()
And the second callstack:
#0 0x0000000100007130 in -[AppDelegate observeValueForKeyPath:ofObject:change:context:] at /Users/tut/Projects/ButTunes/ButTunes/AppDelegate.m:505
#1 0x00007fffa196edbd in NSKeyValueNotifyObserver ()
#2 0x00007fffa196e654 in NSKeyValueDidChange ()
#3 0x00007fffa1aad2d7 in -[NSObject(NSKeyValueObservingPrivate) _changeValueForKeys:count:maybeOldValuesDict:usingBlock:] ()
#4 0x00007fffa1aacc2a in -[NSObject(NSKeyValueObservingPrivate) _notifyObserversOfChangeFromValuesForKeys:toValuesForKeys:] ()
#5 0x00007fffa001166a in forEachObserver ()
#6 0x00007fffa0011888 in -[CFPrefsSource _notifyObserversOfChangeFromValuesForKeys:toValuesForKeys:] ()
#7 0x00007fffa005fde2 in __84-[CFPrefsSearchListSource asynchronouslyNotifyOfChangesFromDictionary:toDictionary:]_block_invoke_2 ()
#8 0x00007fff9ff5130c in __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ ()
#9 0x00007fff9ff32634 in __CFRunLoopDoBlocks ()
#10 0x00007fff9ff31da5 in __CFRunLoopRun ()
#11 0x00007fff9ff317b4 in CFRunLoopRunSpecific ()
#12 0x00007fff9f4cdfbc in RunCurrentEventLoopInMode ()
#13 0x00007fff9f4cdcf9 in ReceiveNextEventCommon ()
#14 0x00007fff9f4cdc26 in _BlockUntilNextEventMatchingListInModeWithFilter ()
#15 0x00007fff9dbb7b79 in _DPSNextEvent ()
#16 0x00007fff9e2cd1c3 in -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] ()
#17 0x00007fff9dbac53d in -[NSApplication run] ()
#18 0x00007fff9db771ad in NSApplicationMain ()
#19 0x0000000100001af2 in main at /Users/tut/Projects/ButTunes/ButTunes/main.m:12
I requested both the old and new values in the change parameter. Both values are the same in each call stack. I'm running 10.12.1 in Xcode 8.1. This sure looks like a bug. Any way to fix it other than checking that the new value is really different than what's really in NSUserDefaults?
--
Steve Mills
Drummer, Mac geek
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden