我想在类别的NSMutableArray中获取对象的索引。
类别对象有一个属性“category_title”,我希望能够通过传递category_title的值来获取索引。
我查看了文档,找不到一个简单的方法来解决这个问题。
答案 0 :(得分:53)
NSArray
不保证您只能存储给定对象的一个副本,因此您必须确保自己处理(或使用NSOrderedSet
)。
那就是说,这里有几种方法。如果您的类别对象实施isEqual:
以匹配category_title,那么您只需使用-indexOfObject:
。
如果您不能这样做(因为类别对象使用不同的相等定义),请使用-indexOfObjectPassingTest:
。它需要一个块,您可以在其中执行任何您想要定义“测试”的测试 - 在这种情况下,测试category_title
字符串相等。
请注意,这些都是针对NSArray
声明的,因此如果您只查看NSMutableArray
标题/文档,则不会看到它们。
编辑:代码示例。这假定类CASCategory
的对象具有NSString
属性categoryTitle
(我无法将自己的下划线放入ivar名称中: - ):
CASCategory *cat1 = [[CASCategory alloc] init];
[cat1 setCategoryTitle:@"foo"];
CASCategory *cat2 = [[CASCategory alloc] init];
[cat2 setCategoryTitle:@"bar"];
CASCategory *cat3 = [[CASCategory alloc] init];
[cat3 setCategoryTitle:@"baz"];
NSMutableArray *array = [NSMutableArray arrayWithObjects:cat1, cat2, cat3, nil];
[cat1 release];
[cat2 release];
[cat3 release];
NSUInteger barIndex = [array indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
if ([[(CASCategory *)obj categoryTitle] isEqualToString:@"bar"]) {
*stop = YES;
return YES;
}
return NO;
}];
if (barIndex != NSNotFound) {
NSLog(@"The title of category at index %lu is %@", barIndex, [[array objectAtIndex:barIndex] categoryTitle]);
}
else {
NSLog(@"Not found");
}
答案 1 :(得分:1)
不确定我是否理解这个问题,但这样的事情可能有用(假设Mutable数组包含Class“Category”的对象):
int indx;
bool chk;
for (Category *aCategory in theArray)
{
chk = ([[aCategory category_title] isEqualToString:@"valOfCategoryTitle"])
if ( chk )
indx = [theArray indexOfObject:aCategory];
}
答案 2 :(得分:0)
尝试使用此代码要简单得多: -
int f = [yourArray indexOfObject:@"yourString"];