특정 키에 대한 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는 절대로 호출되지 않습니다. 심지어는 SOME_NSSTRING_VARIABLE을 Observing value changes to an NSUserDefaults key에서 언급 한 문자열로 대체하려고 시도했지만 도움이되지 않았습니다.
업데이트 : NSUserDefaults를 tabview에서 변경하고 있습니다. 위 코드는 변경 사항을 모니터링하기 위해 동일한 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가 호출되지 않았습니다.
당신이 변경 코드를 게시하시기 바랍니다 변수도 너무 – trapper
또한 나는 그것을 가지고'[[NSUserDefaults st andardUserDefaults] addObserver ...'내부'viewDidLoad'? – trapper
NSUserDefaults * FDefaults = [NSUserDefaults standardUserDefaults]; [FDefaults setObject : userName.text forKey : SOME_NSSTRING_VARIABLE]; [[NSUserDefaults 표준 사용자 정의]] 동기화]; –