一、
-(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];
上面那个那个跟没转一样,还是不可变字典。
网友评论