Обнаружение изменений в NSUserDefaults
Я разрабатываю приложение iOS с последним SDK.
Я хочу знать, когда свойство на NSUserDefaults
изменяет его значение.
Я нашел этот, но он специфичен для MAC:
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self
forKeyPath:[@"values." stringByAppendingString: @"MyPreference"]
options:NSKeyValueObservingOptionNew
context:NULL];
Как я могу сделать это на iOS?
Ответы
Ответ 1
попробуйте NSUserDefaultsDidChangeNotification
с помощью этого фрагмента кода:
- (id)init {
self = [super init];
if(self) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(defaultsChanged:)
name:NSUserDefaultsDidChangeNotification
object:nil];
}
return self;
}
- (void)defaultsChanged:(NSNotification *)notification {
// Get the user defaults
NSUserDefaults *defaults = (NSUserDefaults *)[notification object];
NSLog(@"%@", [defaults objectForKey:@"yourIntrestedObject"]);
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
Ответ 2
Использовать NSUserDefaultsDidChangeNotification для уведомления об изменении настроек пользователя по умолчанию:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(defaultsDidChange:) name:NSUserDefaultsDidChangeNotification
object:nil];
// notification
- (void)defaultsDidChange:(NSNotification *)aNotification
{
//
}
Используйте KVO для уведомления об определенных изменениях в настройках пользователя по умолчанию:
[[NSUserDefaults standardUserDefaults] addObserver:self
forKeyPath:@"APXMyPropertyIamInterestedInKey" options:NSKeyValueObservingOptionNew
context:NULL];
// KVO handler
-(void)observeValueForKeyPath:(NSString *)aKeyPath ofObject:(id)anObject
change:(NSDictionary *)aChange context:(void *)aContext
{
//
}
Ответ 3
Вот решение, которое я написал о том, как это сделать в Swift, а также получить userInfo, fooobar.com/questions/255632/...
Ответ 4
В справке Xcode обзор класса UserDefaults
(экономное имя для NSUserDefaults
) четко указывает:
Вы можете использовать наблюдение за ключевыми значениями для регистрации наблюдателей для конкретных интересующих ключей, чтобы получать уведомления обо всех обновлениях в локальной базе данных по умолчанию. Для получения дополнительной информации см. Руководство по программированию по наблюдению за ключевыми значениями.
Я посмотрю, могу ли я придумать быстрый образец кода, но переполнение стека должно быть заполнено образцами KVO в swift.