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

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

你可能感兴趣的:(iOS NSDictionary 设置或改变里面的某个key的值及报错分析)