我想要在类别的NSMutableArray中获得一个对象的索引。
category对象有一个属性" category_title“,我希望能够通过传递category_title的值来获得索引。
我已经看过文档了,找不到一种简单的方法来解决这个问题。
发布于 2012-02-04 07:25:19
NSArray
不能保证您只能存储给定对象的一个副本,因此您必须确保自己处理该副本(或使用NSOrderedSet
)。
也就是说,这里有几种方法。如果您的category对象实现isEqual:
来匹配category_title,那么您可以只使用-indexOfObject:
。
如果无法做到这一点(因为category对象使用了不同的相等定义),请使用-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");
}
发布于 2012-02-04 07:40:31
我不确定我是否理解了这个问题,但类似这样的东西可能会起作用(假设可变数组包含“Category”类的对象):
int indx;
bool chk;
for (Category *aCategory in theArray)
{
chk = ([[aCategory category_title] isEqualToString:@"valOfCategoryTitle"])
if ( chk )
indx = [theArray indexOfObject:aCategory];
}
发布于 2012-02-04 21:30:23
尝试下面的代码要简单得多:
int f = [yourArray indexOfObject:@"yourString"];
https://stackoverflow.com/questions/9136785
复制相似问题