突然想着set一个值进去,为了方便点,在同一个对象中拿值,结果竟然崩溃,百思不得其解,后来通过property的方式传值过去。第二天早上仔细研究了下 ,原先的流程是一开始在didload里面创建了可变字典
- (void)viewDidLoad {
[super viewDidLoad];
[_mTableView setBackgroundColor:[UIColor clearColor]];
[self setTitle:@"添加银行卡"];
_mTableView.tableFooterView=_footView;
_footView.backgroundColor=CLEARCOLOR;
dicCardBin=[[NSMutableDictionary alloc] init];
// Do any additional setup after loading the view.
}
请求数据的时候 dicCardBin =(NSMutableDictionary *)responseData;
[dicCardBin setObject:[cellTwo.mTextField.text delectSpace] forKey:@"bankCard"]; //此时崩溃
问了楠哥,楠哥很严肃反问,不可变字典转可变字典是这样转的吗?当时就感觉可能就是这个地方错了,虽然这么赋值dicCardBin是可以接到服务器返回来的值,可以作为后面的处理,但是其实还是属于不可变字典,尽管定义和构造看起来是不可变的,原因正是出在这里,因为本人觉得不可变字典虽然setValue不可用,但是不至于setObject也不可用吧! 经过楠哥指点,加上我当时顿悟,立马回去改写,运行了下,完全没有问题,一次过!
改写是这样的,didload立马方法注释掉//dicCardBin=[[NSMutableDictionary alloc] init];
在请求的时候
if (responseData) {
//得到用户输入卡的类型
// dicCardBin =(NSMutableDictionary *)responseData;
dicCardBin=[[NSMutableDictionary alloc] initWithDictionary:responseData];
[dicCardBin setObject:[cellTwo.mTextField.text delectSpace] forKey:@"bankCard"];
}
这么处理就可以了。看起来很简单,不遇到问题和联系实际场景,根本感觉不到。
最早写这个的时候,当时就是怕写在请求里面会构造多次,还要做非空判断,太麻烦,倒不如直接didload里面早点构造了算了,结果三年后,自己的坑自己去踩。最基础的其实还是最重要的。那些你理解不了的基础还是要从项目中实践。