检查NSMutableArray中是否存在某些内容

时间:2011-07-22 14:13:26

标签: iphone objective-c cocoa-touch nsmutablearray

我有一个可以容纳多个对象的NSMutableArray。我想检查对象是否存在,如果存在,请更改它。我想知道检查它。我认为这样可行:

if ([[[self.myLibrary objectAtIndex:1] subObject] objectAtIndex:1]) // do something

但是,如果索引1处没有任何子对象,则会崩溃。 所以我猜问题是如果此索引没有任何内容,上述内容不会返回nil。

还有另一种简单的检查方法,还是我必须通过数组等进行计数?我知道stackoverflow上还有其他帖子,但我还没有找到一个简单的答案。

欢迎任何解释/建议。谢谢!

4 个答案:

答案 0 :(得分:46)

不检查只需使用:

[myArray indexOfObject:myObject];

[myArray containsObject:myObject];

这些方法使用isEqual检查每个对象。


例如:

NSUInteger objIdx = [myArray indexOfObject: myObject];
if(objIdx != NSNotFound) {
    id myObj = [myArray objectAtIndex: objIdx];
    // Do some alter stuff here
}

答案 1 :(得分:13)

如果这是一个你经常使用的模式,你可以在NSArray中添加一个名为safeObjectAtIndex:的类别,它接受一个索引,在内部进行边界检查:

-(id)safeObjectAtIndex:(NSUInteger)index {
  if (index >= [self count])
    return nil;
  return [self objectAtIndex:index];
}

答案 2 :(得分:3)

假设您用于搜索的对象和数组中的实际对象是完全相同的实例,而不是根据重写的isEqual:方法相同的两个不同对象,您可以这样做:< / p>

if ([array containsObject:objectToSearchFor]) {
    // modify objectToSearchFor
}

如果两个对象是根据isEqual:相同的不同实例,则必须使用如下代码:

NSUInteger index = [array indexOfObject:objectToSearchFor];
if (index != NSNotFound) {
    id objectInArray = [array objectAtIndex:index];
    // modify objectInArray
}

答案 3 :(得分:2)

NSArray(NSMUtableArray超类)有很多查找对象的方法。看看documentation

您可以依赖equals方法(例如indexOfObject :)或提供一个块(例如indexOfObjectPassingTest :),这非常时髦。

在Objective C中使用Mutable版本的类是相当常见的,但是依赖于非可变超类中的方法,因此在查看在线文档以查看超类时总是一个好主意。