特定のキーに対してNSUserDefaults値が変化するイベントをキャッチするために、次のコードを用意しました。iOS NSUserDefaults単一のキーの値の変更を確認する
[[NSUserDefaults standardUserDefaults] addObserver:self
forKeyPath:SOME_NSSTRING_VARIABLE
options:NSKeyValueObservingOptionNew
context:NULL];
- (void)observeValueForKeyPath:(NSString *) keyPath ofObject:(id) object change:(NSDictionary *) change context:(void *) context
{NSLog (@"Changed for key %@", keyPath); }
しかし、observeValueForKeyPathが呼び出されることはありません。私もObserving value changes to an NSUserDefaults keyに記載されているように、SOME_NSSTRING_VARIABLEも文字列で置き換えようとしましたが、それは助けになりませんでした。
更新: NSUserDefaultsをタブビューから変更しています。変更を監視する上記のコードは、同じtabviewcontrollerの別のタブにあります。私が追加した場合、私は、変更(上記のコードが存在しているタブ)を監視]タブで:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// NSLog(@"viewillappear");
NSUserDefaults *FUDefaults = [NSUserDefaults standardUserDefaults];
NSLog(@"The username obtained is: %@", [FUDefaults objectForKey:SOME_NSSTRING_VARIABLE]);
}
更新NSUserDefaults値が正しく取得されていますが、observeValueForKeyPathが呼ばれることはなかったです。
変更コードを投稿してください変数もtoo – trapper
また、私はそれを取る '[[NSUserDefaults st andardUserDefaults] addObserver ... '' viewDidLoad'の内部? – trapper
NSUserDefaults * FDefaults = [NSUserDefaults standardUserDefaults]; [FDefaults setObject:userName.text forKey:SOME_NSSTRING_VARIABLE]; [[NSUserDefaults standardUserDefaults] synchronize]]; –