2014-02-14 2 views
-3

"레벨 1-2 열기"에서 "레벨 1-2 닫힘"변경 값은 어떻게됩니까? 삭제하고 새로운 값을 추가해야합니까? 또는 단순히 덮어 씁니까? 어떻게해야합니까?NSdictionary에서 변경 값은 어떻게됩니까?

감사

NSDictionary *dict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"key_open_levels"]; 

     dict = [NSDictionary dictionaryWithObjectsAndKeys: 
        @"open", @"level 1-1", 
        @"closed", @"level 1-2", 
        @"closed", @"level 1-3", 
        @"closed", @"level 1-4", 
        @"closed", @"level 1-5", 
        @"closed", @"level 1-6", 
        @"closed", @"level 1-7", 
        @"closed", @"level 1-8", 
        @"closed", @"level 1-9", 
        @"closed", @"level 1-10", nil]; 

      // NSString *customerDict ; 
      [[NSUserDefaults standardUserDefaults] setValue:dict forKey:@"key_open_levels"]; 


      if ([[dict valueForKey:@"level 1-2"] isEqualToString:@"closed" ]){ 

      //what should I write here? 

      }else{ 

} 
+0

변경 가능한 사전이 아니므로 작성 후에는 아무 것도 변경할 수 없습니다. –

+0

어떻게? 당신은 예제를 – catalunya

답변

8

시도를 추가해야하는 경우 ..

NSMutableDictionaray *dict = [NSMutableDictionaray dictionaryWithObjectsAndKeys: 
         @"open", @"level 1-1", 
         @"closed", @"level 1-2", 
         @"closed", @"level 1-3", 
         @"closed", @"level 1-4", 
         @"closed", @"level 1-5", 
         @"closed", @"level 1-6", 
         @"closed", @"level 1-7", 
         @"closed", @"level 1-8", 
         @"closed", @"level 1-9", 
         @"closed", @"level 1-10", nil]; 

[dict removeObjectForKey:@"level 1-2"]; 
[dict setObject:@"open" forKey:@"level 1-2"]; 
0

NSDictionary와는 불변이므로 값을 변경할 수 없다. NSMutableDictionary는 변경 가능하며, 추가하면 삭제가 수행됩니다.

@Amar는 링크를 사용합니다. 유용한 정보

1
In your code below [[NSUserDefaults standardUserDefaults] setValue:dict forKey:@"key_open_levels"]; 

Use below line of code than it will work. 

[defaults synchronize]; 

또한 NSDictionary 대신 NSMutableDictionary를 사용하십시오.

2

당신이 코드 아래에 전체 NSDictionary-NSMutableDictionary

NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init]; 
[newDict addEntriesFromDictionary: dict]; 
[newDict setObject:@"<value>" forKey:@"<Key Name>"]; 
NSLog(@"%@", newDict); 
0

당신은 NSMutableDictionaryNSDictionary을 변환해야합니다.

또는

당신은 NSDictionary 대신에 사용자 NSMutableDictionary에 있습니다.

그런 다음 NSMutableDictionary의 값을 변경할 수 있습니다.

NSMutableDictionary *mutableDict = [dict mutableCopy]; 
0

애플은 NSMutableDicitonary를 편집 할 수있는 키 - 값 쌍에 데이터를 저장하기 위해 우리에게 NSMutableDictionaryNSDicitionary을 제공합니다. 그것은 데이터가 될 것입니다 경우 대신 예를 들어 NSDictionary 또는 [instanceOfNSDictionary mutableCopy]

을 만드는 NSMutableDictionary를 사용해야 변경하는 용도에 따라 달라집니다

NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
     @"open", @"level 1-1", 
     @"closed", @"level 1-2", 
     @"closed", @"level 1-3", 
     @"closed", @"level 1-4", 
     @"closed", @"level 1-5", 
     @"closed", @"level 1-6", 
     @"closed", @"level 1-7", 
     @"closed", @"level 1-8", 
     @"closed", @"level 1-9", 
     @"closed", @"level 1-10", nil]; 

[dict2 setObject:@"open" forKey:@"level 1-2"]; //<---- Set value at later stage 

편집

 // Archive data to save 
     NSMutableArray *archiveArray = [NSMutableArray array]; 
     NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:completeResponse]; 
     [archiveArray addObject:personEncodedObject]; 

     // Set in userDefault 
     [[NSUserDefaults standardUserDefaults] setValue:archiveArray forKey:@"key_open_levels"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 


     // Get archived data from userdefault 
     archiveArray = [[NSUserDefaults standardUserDefaults] valueForKey:@"key_open_levels"]; 

     // Unarchive and use it 
     NSLog(@"%@", [NSKeyedUnarchiver unarchiveObjectWithData:[archiveArray objectAtIndex:0]]); 
+0

주고 어떻게 NSUserDefaults 데이터를 저장하기 위해 standardUserDefaults를 사용할 수 있습니까? – catalunya

+0

completeResponse NSString입니까? 그리고 그것은 비어 있습니까? – catalunya

-1
당신이 같이 할 수

이 .. nsdictionary는 정적입니다. 일단 객체가 생성되면 객체를 설정할 수 없습니다. nsmutabledictionary로 가져 가십시오. 당신은 그것을 chage 수 있습니다. NSMutableDictionary * dict = [[NSMutableDictionary alloc] init];

dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
     @"open", @"level 1-1", 
     @"closed", @"level 1-2", 
     @"closed", @"level 1-3", 
     @"closed", @"level 1-4", 
     @"closed", @"level 1-5", 
     @"closed", @"level 1-6", 
     @"closed", @"level 1-7", 
     @"closed", @"level 1-8", 
     @"closed", @"level 1-9", 
     @"closed", @"level 1-10", nil]; 



[dict setObject:@"open" forKey:@"level 1-5"]; 

NSLog(@"%@",dict); 
관련 문제