美文网首页
iOS--setValue和setObject中踩到的坑

iOS--setValue和setObject中踩到的坑

作者: 乐逍遥的笔记 | 来源:发表于2017-11-20 16:41 被阅读101次

在开发的过程中,对一个NSMutableDictionary(可变字典)设置键值对的时候,一般会采用setObject这个方法,但是在项目中,去云捕上看到的用户出错,好多都是报这样的错误。

很明显就是在setObject方法中插入了空值而导致的报错。解决的办法是将setObject替换成setValue就可以了。虽然解决了,但是他们之间的区别以及为什么setValue就可以呢?

因为setObject方法中,值必须是不为空的任意类型(nonnull),而setValue方法中,值可以为空值(nullable),并且在setValue方法中,假如你传的值为空的话,那么他会调用- (void)removeObjectForKey:(id)aKey;这个方法。所以用setValue方法可以有效的防止值为空所出现的炸裂现象。

注意:在系统给出的方法中,我们可以明显的看到,setValue方法中,key必须是不为空的字符串(nonnull NSString),而setObject方法中,可以传入不为空的id类型。

setValue和setObject的一些拓展�:

1.setObject方法是NSDictionary这个类中特有的,而setValue是KVC(key-value-coding  键值编码)中的主要方法。

2.setObject方法中,虽然值不能为nil,但是可以为[NSNull null],并且key可以为NSString, NSNumber等类型。

3.当 setValue:forKey:方法调用者是对象的时候:

setValue:forKey:方法是在NSObject对象中创建的,也就是说所有的oc对象都有这个方法,所以可以用于任何类。

比如使用一个person类:

Person *person = [[Person alloc] init];

[person setValue:self forKey:@"delegate"];

表示的意思是:对象person设置他的delegate属性的值为当前类,当然调用此方法的对象必须要有delegate属性才能设置,不然调用了也没效果。(这条目前还不太理解,希望有看到的大神指教)

setValue和setObject参考链接:http://blog.csdn.net/itianyi/article/details/8661997

相关文章

  • iOS--setValue和setObject中踩到的坑

    在开发的过程中,对一个NSMutableDictionary(可变字典)设置键值对的时候,一般会采用setObje...

  • setValue: forKey: 和 setValue: fo

    setObject forKey 和 setValue forKey setObject:ForKey: 是NSM...

  • 学习中容易踩到的坑

    2016年被称为知识付费元年,越来越多人致力于成为终身学习者,我也是其中一员。大概去年的这个时候,我开始读书,也会...

  • 使用UIWebView中踩到的坑

    iOS7上UIWebView可以左右滑动 经过无数尝试发现,只要UIWebView的宽比屏幕的宽小一些,1个点左右...

  • iOS面试中踩到的坑

    面试的坑,不同的基础就会有不同的坑,不多说了直接上面试题:(面试题与答案会持续更新) 1、简述关键字assign、...

  • NSMutableDictionary的[setObject:f

    setObject:forKey:和setObject:forKeyedSubscript:的作用是相同的,这两个...

  • 产品经理踩坑后的吐血总结

    在项目中不止技术人员会踩到许多的坑,对产品经理来说也会踩到不少的坑。 就在这里总结工作多年来所踩到的坑,给刚刚进入...

  • Spark MapOutputTracker浅析

    最近工作中踩到一个MapOutputTracker相关的坑 (SPARK-21444), troubleShoot...

  • 2020-11-19

    记录flutter开发过程中踩到的各种坑 1.Navigator operation requested with...

  • 图片轮播器中踩到的坑

    # bug :图片轮播器手动拖拽时垂直方向上存在偏移量(轮播器为水平方向滚动) 前提: contentSize的滚...

网友评论

      本文标题:iOS--setValue和setObject中踩到的坑

      本文链接:https://www.haomeiwen.com/subject/evbvvxtx.html