我想要获取NSMutableArray中类别对象的索引。
类别对象拥有一个名为“category_title”的属性,我希望能够通过传递category_title的值来获取其索引。
我查看了文档,但没有找到简单的方法来实现这一目标。
我想要获取NSMutableArray中类别对象的索引。
类别对象拥有一个名为“category_title”的属性,我希望能够通过传递category_title的值来获取其索引。
我查看了文档,但没有找到简单的方法来实现这一目标。
NSArray
不能保证您只能存储给定对象的一个副本,因此您需要确保自己处理(或使用 NSOrderedSet
)。
话虽如此,这里有几种方法。如果您的类别对象实现 isEqual:
来匹配类别标题,那么您可以使用 -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");
}
我不确定我理解这个问题,但是类似这样的代码可能会起作用(假设可变数组包含“Category”类的对象):
int indx;
bool chk;
for (Category *aCategory in theArray)
{
chk = ([[aCategory category_title] isEqualToString:@"valOfCategoryTitle"])
if ( chk )
indx = [theArray indexOfObject:aCategory];
}
int f = [yourArray indexOfObject:@"yourString"];