2010-08-17 127 views
1

这里就是我试图做的事:添加对象的NSMutableArray与foreach循环

NSMutableArray *objectNames = [[NSMutableArray alloc] init]; 
for (Object *o in objectList){ 
    if (![objectNames containsObject:o.name]) { 
     [objectNames addObject:o.name]; 
    } 
} 

我试图去通过对象的数组,然后乘坐对象名称(字符串),并把它添加到objectNames的字符串数组。

这段代码在模拟器中工作得很好。但是当我在设备上运行它时,出现此错误。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFArray insertObject:atIndex:]: attempt to insert nil' 

回答

4

objectList中的一个或多个对象将其名称属性设置为nil。这会导致你试图在objectNames中插入nil,这会给你带来异常。

如果它是确定一个对象有为零的名称,你需要做的是检查这一点,你插入对象名排序前:

NSMutableArray *objectNames = [[NSMutableArray alloc] init]; 
for (Object *o in objectList){ 
    if (name && ![objectNames containsObject:o.name]) { 
     [objectNames addObject:o.name]; 
    } 
} 
+0

这个作品,我也建议使'objectNames'是一个'NSMutableSet'而不是一个数组。一个集合不能包含重复项,所以你可以省略'-containsObject:'调用,加上它没有索引的事实,我不认为这是你需要的。 – Joost 2010-08-17 19:06:25

+0

愚蠢的错误谢谢你,只是不明白为什么它可以在模拟器而不是设备上工作。这对我来说似乎很奇怪。 – Matt 2010-08-17 19:20:09

+0

也许这些对象是从一些外部来源(Core Data?)获取的,这在设备上有所不同? – eliego 2010-08-17 19:29:12

1

看起来像你的对象不具有一个一个name设置正确