2012-12-17 5 views
2
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"content", @"myKey", nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary]; 
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"myKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
NSLog(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"]); 

로그인 등록 된 기본값을 제거 할 수 없습니다 :내가 기본값을 등록 할 "registerDefaults"를 사용하는 경우, 내가

2012-12-17 17:09:05.062 browserHD[4075:c07] content 

왜 결과 값 "내용"? 결과 값을 "nil"으로 지정합니다.

+0

또는 내가 등록한 값을 변경할 수 있습니까? –

+0

내 코드를 확인하고 나를 업데이트하십시오. –

답변

0

registerDefaults는 setObject : forKey : 또는 removeObjectForKey와 다른 사용자 수준의 "레벨"에 영향을줍니다. 표준 사용자 기본값보다 높은 수준 인 전역 사용자 기본값으로 이동합니다. '글로벌'은 여전히 ​​앱의 로컬이므로 잘못된 이름입니다.

이 방법으로 전역 사용자 기본값에서 값을 제거 할 수 없습니다. 값이 사용자 값의 경우

Global Defaults (NSGlobalDomain) -> User Defaults (NSRegistrationDomain)

그런 다음 글로벌 값을 대체. 그렇지 않으면 글로벌 기본값의 값이 사용됩니다. 값을 추가 및 제거하는 것은 사용자 기본값 수준에만 영향을줍니다.

사용자 기본값을 제거하면 전역 기본값이 항상 "빛나게"되므로 분명히 전역 기본값을 제거 할 수 없습니다. 그러나 당신은 무제한으로 대체하기를 원하는 객체의 객체 값을 [NSNull null]으로 설정할 수 있습니다. 그런 다음 코드에서이 경우를 확인합니다. 기본값은 nil이거나 값이 설정되지 않았다는 것을 나타내는 [NSNull null]입니다.

+0

재설정을 위해 resetStandardUserDefaults를 사용하지만 기본값은 여전히 ​​존재합니다. –

+0

오, 그렇다면 내가 틀렸고 기본값을 등록 취소 할 수 없습니다. – Cocoanetics

2

네, 맞습니다 ...

이것은 완벽한 해결책이 아닐 수 있습니다. 그러나 문제를 해결하기위한 약간의 비틀기.

이 방법을 사용하면 효과가 있습니다!

- (IBAction)set:(id)sender { 
    NSMutableDictionary *aDict=[NSMutableDictionary new]; 
    [aDict setObject:_myText.stringValue forKey:@"key"]; 

    [[NSUserDefaults standardUserDefaults] registerDefaults:aDict]; 
} 

- (IBAction)remove:(id)sender { 
    NSMutableDictionary *aDict=[NSMutableDictionary new]; 
    [aDict setObject:@"null" forKey:@"key"]; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:aDict]; 
} 

- (IBAction)get:(id)sender { 
    NSLog(@"-> %@",[[NSUserDefaults standardUserDefaults]objectForKey:@"key"]); 
} 
+0

고맙습니다. "setObject :"를 사용하면 work.But 일 수 있습니다. 문제는 "registerDefaults :"를 사용해야한다는 것입니다. –

+0

이 비틀기 코드를 확인하십시오. –

관련 문제