2014-02-14 27 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是可變的,只有你添加,刪除performes可以完成。

使用@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]; 

也使用NSMutableDictionary而不是NSDictionary。

2

如果您需要添加下面的代碼整個NSDictionaryNSMutableDictionary

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

你必須NSDictionary轉換爲NSMutableDictionary

或者

你有用戶NSMutableDictionary到位NSDictionary的。

之後,您可以更改NSMutableDictionary中的值。

NSMutableDictionary *mutableDict = [dict mutableCopy]; 
0

蘋果爲我們提供NSMutableDictionaryNSDicitionary存儲在鍵值對數據,其中NSMutableDicitonary編輯。這取決於使用,如果數據會改變你應該使用NSMutableDictionary而不是創建NSDictionary或​​

例如:

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 * 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);