本文共 2368 字,大约阅读时间需要 7 分钟。
非法参数异常(NSInvalidArgumentException)是 Objective -C 代码最常出现的错误,所以平时在写代码的时候,需要多加注意,加强对参数的检查,避免传入非法参数导致异常,其中尤以nil参数为甚。
在我们编码中经常会对NSDictionary,NSMutableArray, NSMutableDictionary等进行数据操作,在传递参数时,需要判断参数的类型,否则很容易出错。一般我们自己单独使用这些集合对象时,可能会注意到参数的处理,但在一个大的项目中时,这个参数可能是由其他模块传递进来的,往往会忽略参数检查。
1. NSMutableDictionary添加对象
setObject:forKey
key和value都不能为nil,否则会出现NSInvalidArgumentException异常
setObject:forKeyedSubscript
key不能为nil,,否则会出现NSInvalidArgumentException异常;object可以为nil
2. NSMutableDictionary删除对象
removeObjectForKey
key不能为nil
3. NSDictionary初始化
dictionaryWithObject:forKey
key和value都不能为nil
dictionaryWithObjects:forKeys
objects和keys必须是一样多的元素
dictionaryWithObjects:forKeys:count
keys和objects都不能为nil
dictionaryWithObjectsAndKeys
任意key不能为nil
4. NSArray获取匹配的下标
- indexOfObject:inSortedRange:options:usingComparator:
obj不能为nil
cmp不能为NULL
opts的设置也有一定的限制条件
5. 给NSArray对象发送消息
- makeObjectsPerformSelector:
aSelectior不能为NULL
6. 给NSArray的某个对象发送消息
- makeObjectsPerformSelector:withObject:
aSelectior不能为NULL
7. NSArray添加对象后返回新的NSArray
- arrayByAddingObject:
anObject不能为nil
8. NSMutableArray添加对象
- addObject:
anObject不能为nil
9. NSMutableArray插入对象
- insertObject:atIndex:
anObject不能为nil
10. NSMutableArray替换对象
- replaceObjectAtIndex:withObject:
anObject不能为nil
11. NSMutableArray设置对象
- setObject:atIndexedSubscript:
anObject不能为nil
1. NSString初始化
- initWithString:
aString不能为nil
2. NSString格式初始化
- initWithFormat:
format不能为nil
- initWithFormat:arguments:
- initWithFormat:locale:
- initWithFormat:locale:arguments:
3. NSString其他NSString对象初始化
aString不能为nil
4. NSString的其他操作
aSet不能为nil
5. NSMutableString的格式初始化
format不能为nil
6. NSMutableString的替换操作
- replaceOccurrencesOfString:withString:options:range:
target和replacement都不能为nil
7. NSURL的初始化
- initFileURLWithPath:isDirectory:
可能出现'nil string parameter'的错误
(1)、传递的参数是nil
(2)、参数如果不为nil的话,那就是这个文件没被target识别,确定添加是否正确或者重新添加
8. NSString的前后缀操作
可能出现‘nil argument’的错误