aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Shpakovski2013-04-15 23:24:46 +0300
committerVadim Shpakovski2013-04-15 23:24:46 +0300
commit8ede00468722a62b9bf7809a3c9e3f3aeefcdf49 (patch)
tree9d1989f885835ad4d5aa82a3d2b7c3bacb4daa01
parentfe33039c18b08b2dc37149589a057da76ffc08f1 (diff)
downloadMASShortcut-8ede00468722a62b9bf7809a3c9e3f3aeefcdf49.tar.bz2
Fixing a problem with user defaults.
-rw-r--r--MASShortcut+UserDefaults.m23
1 files changed, 18 insertions, 5 deletions
diff --git a/MASShortcut+UserDefaults.m b/MASShortcut+UserDefaults.m
index ed1531c..cf9615e 100644
--- a/MASShortcut+UserDefaults.m
+++ b/MASShortcut+UserDefaults.m
@@ -50,7 +50,9 @@
#pragma mark -
-@implementation MASShortcutUserDefaultsHotKey
+@implementation MASShortcutUserDefaultsHotKey {
+ NSString *_observableKeyPath;
+}
@synthesize monitor = _monitor;
@synthesize handler = _handler;
@@ -58,27 +60,38 @@
#pragma mark -
+void *MASShortcutUserDefaultsContext = &MASShortcutUserDefaultsContext;
+
- (id)initWithUserDefaultsKey:(NSString *)userDefaultsKey handler:(void (^)())handler
{
self = [super init];
if (self) {
_userDefaultsKey = userDefaultsKey.copy;
_handler = [handler copy];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDefaultsDidChange:)
- name:NSUserDefaultsDidChangeNotification object:[NSUserDefaults standardUserDefaults]];
- [self installHotKeyFromUserDefaults];
+ _observableKeyPath = [@"values." stringByAppendingString:_userDefaultsKey];
+ [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:_observableKeyPath options:NSKeyValueObservingOptionInitial context:MASShortcutUserDefaultsContext];
}
return self;
}
- (void)dealloc
{
- [[NSNotificationCenter defaultCenter] removeObserver:self name:NSUserDefaultsDidChangeNotification object:[NSUserDefaults standardUserDefaults]];
+ [[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:_observableKeyPath context:MASShortcutUserDefaultsContext];
[MASShortcut removeGlobalHotkeyMonitor:self.monitor];
}
#pragma mark -
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+{
+ if (context == MASShortcutUserDefaultsContext) {
+ [self installHotKeyFromUserDefaults];
+ }
+ else {
+ [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
+ }
+}
+
- (void)userDefaultsDidChange:(NSNotification *)note
{
[MASShortcut removeGlobalHotkeyMonitor:self.monitor];