iOS NSDictionary 设置或改变里面的某个key的值及报错分析

一、

-(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];

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容