在nil NSMutableSet上使用addObjectsFromArray

时间:2014-06-13 15:50:57

标签: objective-c ios7 nsarray nsset

我有一个NSArray类型的数组(arrayA),其中包含自定义对象,NSMutableSet(setA)也具有相同类的自定义对象。我希望合并这两个中的内容以避免重复值,所以我使用[setA addObjectsFromArray:arrayA]然后我打印setA。

我有一个场景,其中setA将为nil,arrayA将包含一些内容。我的理解是即使setA为nil,[setA addObjectsFromArray:arrayA]也会在SetA中添加arrayA的内容,但是当我打印setA时,我得到的是n而不是setA中的对象。

这是如何" addObjectsFromArray"工作到底?或者我在这里遗失了什么? Apple文档并没有让我对该集合的零部分有很多了解。

3 个答案:

答案 0 :(得分:0)

如果一个对象是nil并且您在其上调用了一个方法,那么它也将返回nil。添加setA的检查为零,将其设置为新的NSMutableSet

请记住,[nil method]始终执行noop。如果您id retVal = [nil methodThatReturnsObjParam]retVal将始终为零。如果您int iVal = [nil methodThatReturnsint]iVal将为0.依此类推。

答案 1 :(得分:0)

如果setA为nil,则将任何消息发送到setA完全没有 no 效果。没有设置,所以你不能添加东西。您必须手动创建NSMutableSet *并添加到它。

答案 2 :(得分:0)

解决方案很简单 - 检查setA是否为nil,如果是,请创建可变集:

if (!setA) {
    setA = [NSMutableSet set];
}
[setA addObjectsFromArray:arrayA];

nil指针上调用任何方法只会返回nil