I am having issues communicating between my host app and its extensions through communicating NSUserDefaults changes.
I initialized NSUserDefaults
using init(suiteName:)
, added KVO observer using the addObserver(...)
method and overrided the method observeValueForKeyPath(...)
but the method observeValueForKeyPath(...)
is not called when I change the value corresponding to the observing key
. It will be greatful if you help me to resolve this.
PS:here suite name is App groups name and NSUserDefaults
created using suiteName as group identifier
will be inside the private area for app groups.
The short answer is that you can't use KVO or even NSNotificationCenter on
NSUserDefaults
to communicate changes between an App Extension and the containing App.There's a great post by Atomic Bird that looks at the ways of coordinating communication. In particular its interesting to look at his analysis of communicating user defaults changes:
So I guess for now a good solution might be to use MMWormhole as they implement the above solution.
Your other option is to use to check the user defaults every time your App becomes active and confirm whether any keys have changed, posting the relevant notifications etc.
Good luck
Just tested, for iOS version later than 10.0, the KVO of the UserDefatuls works perfect fine across process.