2012-03-30 3 views
40

NSMutableDictionary가 있는데, 값을 추가했습니다 (여러 키 쌍 값). 이제이 NSMutableDictionary를 NSUserDefaults 개체에 저장해야합니다.NSDictionary를 NSUserDefaults에 저장합니다.

1.) 다음 코드는; NSMutableDictionary를 NSUSerDefault에서 검색하는 방법을 알고 싶습니다.

2.) NSMutableDictionary를 검색 한 후 NSDictionary에 저장해야합니다. 내가 어떻게 할 수 있니?

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 

[dic addObject:@"sss" forKey:@"hi"]; 
[dic addObject:@"eee" forKey:@"hr"]; 

[NSUserDefaults standardDefaults] setObject:dic forKey:@"DicKey"]; 
[[NSUserDefaults standardDefaults] synchronize]; 
+5

또한 [[[NSUserDefaults standardDefaults] synchronize];를 호출하여 저장해야합니다. 정확히 당신과 고투하고 있습니까? 당신은 당신이하고 싶은 것을 언급했지만 문제가있는 곳은 언급하지 않았습니다. 위에 포함 된 코드 (누락 된'[')를 제외하고는 괜찮아 보입니다. – Sam

+0

일부 키 - 값 쌍을 저장하고 다른보기에서 액세스해야합니다. 그래서 이것과 또한 NSDictionary NSUserDefaults 사용 생각. 마지막으로이 값들을 테이블에 채워야합니다. – shajem

+0

세부 사항을 추가하지 않으면 더 많은 답변을 얻지 못할 것입니다. 당신은 일을 잘하고 있습니다. '[[NSUserDefaults standardDefaults] objectForKey : @ "DicKey"]'를 호출 할 때 사전을 찾지 못합니까? 이것은 NSDictionary * 형식이 될 것이고 NSMutableDictionary *는 아님에 유의하십시오. 뷰 전반에 걸쳐 데이터를 조작하려는 경우 두 뷰에 전달하는 데이터 모델에 데이터를 저장하는 것이 좋습니다 (또는 데이터를 원하는 일반/시각적 방법에 따라 단일 액세서를 제공). – Sam

답변

74

코드는 정확하지만, 당신이 명심해야하는 한 가지 NSUserDefaults는 가변 및 불변의 객체를 구분하지 않는다는 것입니다, 그래서 당신은 그것을 다시 얻을 때 그것은 불변 수 있습니다 :

당신이 변경 가능한 사전을 원하는 경우
NSDictionary *retrievedDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"DicKey"]; 

, 단지 mutableCopy 사용

NSMutableDictionary *mutableRetrievedDictionary = [[[NSUserDefaults standardUserDefaults] objectForKey:@"DicKey"] mutableCopy]; 
+0

'copy'를 사용하면 객체가 유지되므로 소유권자가되고 그 객체를 해제해야합니다. – Saphrosit

+22

수동으로 메모리를 관리하는 것은 마찬가지입니다. – yuji

+2

ARC를 사용하고 있습니다. 그리고 NSMutableDictionary를 NSUser Defaults에 저장하고 NSUserDefaults에서 NSDictionary를 가져와야합니다. 그래서 나는 당신의 첫 번째 접근법을 사용해야합니다. – shajem

5
NSMutableDictionary *profileDictionary = [[NSMutableDictionary alloc] init]; 
[profileDictionary setObject:txt_Username.text forKey:@"USERNAME_KEY"]; 
[profileDictionary setObject:txt_Password forKey:@"PASSWORD_KEY"]; 
[[NSUserDefaults standardUserDefaults] setObject:profileDictionary forKey:@"PROFILE_KEY"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

이것은 예상 한 것입니다.

관련 문제