我有一个可以容纳多个对象的NSMutableArray。我想检查对象是否存在,如果存在,请更改它。我想知道检查它。我认为这样可行:
if ([[[self.myLibrary objectAtIndex:1] subObject] objectAtIndex:1]) // do something
但是,如果索引1处没有任何子对象,则会崩溃。 所以我猜问题是如果此索引没有任何内容,上述内容不会返回nil。
还有另一种简单的检查方法,还是我必须通过数组等进行计数?我知道stackoverflow上还有其他帖子,但我还没有找到一个简单的答案。
欢迎任何解释/建议。谢谢!
答案 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版本的类是相当常见的,但是依赖于非可变超类中的方法,因此在查看在线文档以查看超类时总是一个好主意。