美文网首页
iOS NSDictionary 设置或改变里面的某个key的值

iOS NSDictionary 设置或改变里面的某个key的值

作者: 想想8606 | 来源:发表于2017-07-26 20:35 被阅读0次

    一、

    -(void)switchValueChange:(NSNotification*)noti {

    NSDictionary*dict = [notiuserInfo];

    NSString*str = [dictobjectForKey:@"SwitchChange"];

    NSLog(@"str--[noti userInfo]:%@",str);//sender.on这个打印是对的

    /*****优化方法:给sstatus赋值,******/

    NSMutableDictionary*dataDict = (NSMutableDictionary*)settingArray[tag];

    NSIntegerstatueInteger;

    if([strintValue] == 1){

    statueInteger = 0;

    }else{

    statueInteger = 1;

    }

    [dataDictsetObject:@"statueInteger"forKey:@"sstatus"];

    [myTablereloadData];

    }

    二、会崩掉,原因:-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x7fb1a650d730

    三、原因分析:数组里的的对象是一个不可变字典,这点一定要注意。

    然后,a = [data objectAtIndex:i];; 这句并不会将数组里的某个不可变字典变成可变,这点很重要。这里做的只是声明一个指针变量,并将数组里的一个对象的地址赋值给这个指针变量。数组objectOfIndex返回的是一个id类型对象,但你这里提取出来的是一个不可变字典,最后被一个声明为指向可变字典的指针接收了,但这并不意味着这个对象就变形了。所以不管你声明的是指向什么类型的变量,里面的对象不变。

    所以改成这样吧。

    NSMutableDictionary * a  = [NSMutableDictionary dictionaryWithDictionary:[data objectAtIndex:i]];

    四、也就是说:

    不能强制转换

    要用:[NSMutableDictionary dictionaryWithDictionary:dict];

    上面那个那个跟没转一样,还是不可变字典。

    相关文章

      网友评论

          本文标题:iOS NSDictionary 设置或改变里面的某个key的值

          本文链接:https://www.haomeiwen.com/subject/qsnokxtx.html