如何更改 NS 字典中的值



如何在"Level 1-2 open"上更改值"Level 1-2 关闭"?我必须删除它并添加新价值?还是干脆覆盖?我该怎么做?

谢谢

   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{
}

试试下面的代码。

 NSMutableDictionary *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 removeObjectForKey:@"level 1-2"];
[dict setObject:@"open" forKey:@"level 1-2"];

如果您需要将整个NSDictionary添加到NSMutableDictionary

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

NSDictionary 是不可变的,因此无法更改该值。NSMutable字典是可变的,那么只有你添加,删除执行就可以完成。

使用@Amar所说的链接。 它很有帮助

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。

您必须将

NSDictionary转换为NSMutableDictionary

您必须用用户NSMutableDictionary代替NSDictionary

之后,您可以在 NSMutableDictionary 中更改值。

NSMutableDictionary *mutableDict = [dict mutableCopy];

Apple为我们提供了NSMutableDictionaryNSDicitionary,将数据存储在键值对中,其中NSMutableDicitonary是可编辑的。这取决于用途,如果数据将被更改,您应该使用NSMutableDictionary而不是创建NSDictionary[instanceOfNSDictionary mutableCopy]

例如:

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]]);
你可以这样做。 nsdictionary 是静态的。 一旦

创建对象,我们就无法设置它。 把它当作一个 nsmutabledictionary . 你可以叽叽喳喳。 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);

最新更新