注册 登录
主题 : reason: '*** setObjectForKey: object cannot be nil (key: xxx)'
级别: 侠客
UID: 569608
精华: 0
发帖: 85
可可豆: 274 CB
威望: 274 点
在线时间: 457(时)
注册时间: 2016-06-22
最后登录: 2017-06-23
楼主 : 发表于: 2016-12-23 15:25    发自: Web Page
来源于 一般提问 分类

reason: '*** setObjectForKey: object cannot be nil (key: xxx)'   

前几天接手了一个外包的项目,代码中诸如填充请求参数的地方:
[params setObject:_value forKey:@"xxx"];
对这里的_value值没做任何判断,代码里全是这种写法

现在点着点着不定期就崩了
reason: '*** setObjectForKey: object cannot be nil (key: xxx)'

请问有什么好的方法可以全局处理下这种nil 吗,在set之前将其过滤掉?

有考虑过使用category写个方法来做一重判断,但需要更改的地方太多了


谢谢
关键词: setObjectForKey
级别: 精灵王
UID: 140609
精华: 0
发帖: 1009
可可豆: 1216 CB
威望: 1216 点
在线时间: 2444(时)
注册时间: 2012-05-04
最后登录: 2017-06-24
沙发 : 发表于: 2016-12-23 15:31    发自: Web Page
在model文件中加以下代码试试:

//设置键没有找到时候的方法,否则程序有可能奔溃
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
    
}

//设置某个属性为nil的时候的方法
-(void)setNilValueForKey:(NSString *)key{
    
}
级别: 侠客
UID: 569608
精华: 0
发帖: 85
可可豆: 274 CB
威望: 274 点
在线时间: 457(时)
注册时间: 2016-06-22
最后登录: 2017-06-23
板凳 : 发表于: 2016-12-23 15:35    发自: Web Page
回 1楼(kaka_007) 的帖子
代码里压根就找不到model
全是以key名随取随用
级别: 精灵王
UID: 164303
精华: 0
发帖: 3023
可可豆: 3353 CB
威望: 3331 点
在线时间: 4598(时)
注册时间: 2012-09-02
最后登录: 2017-06-24
3 楼:  发表于: 2016-12-23 16:09    发自: Web Page
运行时替换掉setValue: forKey,将所有传入的nil转成空字符串。params因该是一个字典,替换掉字典的方法就可以了。


但。。。这样做也不是最好的。我建议你将整个项目翻个遍,逐个加入检查。
级别: 侠客
UID: 569608
精华: 0
发帖: 85
可可豆: 274 CB
威望: 274 点
在线时间: 457(时)
注册时间: 2016-06-22
最后登录: 2017-06-23
4 楼:  发表于: 2016-12-23 16:20    发自: Web Page
引用
引用第3楼noah1985于2016-12-23 16:09发表的  :
运行时替换掉setValue: forKey,将所有传入的nil转成空字符串。params因该是一个字典,替换掉字典的方法就可以了。


但。。。这样做也不是最好的。我建议你将整个项目翻个遍,逐个加入检查。


一开始是想着直接使用category 覆盖原有setObjectForKey方法,但考虑到各种弊端就放弃了这种方案
全局搜了下太多了
因为value值是动态的,可为nil可不为nil,不知道这代码写的时候为啥不加个判断,难道他们当时调的时候没崩过
实在没办法只能一个一个改了,这他妹的体力活啊

级别: 精灵王
UID: 164303
精华: 0
发帖: 3023
可可豆: 3353 CB
威望: 3331 点
在线时间: 4598(时)
注册时间: 2012-09-02
最后登录: 2017-06-24
5 楼:  发表于: 2016-12-23 16:27    发自: Web Page
引用
引用第4楼FinalWay于2016-12-23 16:20发表的  :


一开始是想着直接使用category 覆盖原有setObjectForKey方法,但考虑到各种弊端就放弃了这种方案
全局搜了下太多了
因为value值是动态的,可为nil可不为nil,不知道这代码写的时候为啥不加个判断,难道他们当时调的时候没崩过
.......


有什么奇怪的,这种坑外包很多,尤其对方实力不足的时候。
你除了每晚画圆圈诅咒他们也于事无补,还是逐个加判断吧。
描述
快速回复

关注本帖(如果有新回复会站内信通知您)

验证问题:
苹果公司现任CEO是谁?2字 正确答案:库克

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部