Я хочу получить индекс объекта в категориях NSMutableArray.
Объект категории имеет атрибут "category_title", и я хочу получить индекс, передав значение category_title.
Я просмотрел документы и не могу найти простой способ сделать это.
Я хочу получить индекс объекта в категориях NSMutableArray.
Объект категории имеет атрибут "category_title", и я хочу получить индекс, передав значение category_title.
Я просмотрел документы и не могу найти простой способ сделать это.
NSArray
не гарантирует, что вы можете хранить только одну копию данного объекта, поэтому вам нужно убедиться, что вы справляетесь с этим сами (или используйте NSOrderedSet
).
Тем не менее, здесь есть пара. Если объекты категории реализуют isEqual:
для соответствия category_title, вы можете просто использовать -indexOfObject:
.
Если вы не можете этого сделать (потому что объекты категории используют другое определение равенства), используйте -indexOfObjectPassingTest:
. Он принимает блок, в котором вы можете выполнить любой тест, который вы хотите определить, "тест" - в этом случае тестирование category_title
равенства строк.
Обратите внимание, что все они объявлены для NSArray
, поэтому вы не увидите их, если вы смотрите только заголовок/документацию NSMutableArray
.
EDIT: образец кода. Это предполагает объекты класса 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");
}
Не уверен, что я понимаю вопрос, но что-то вроде этого может работать (если Mutable Array содержит объекты класса "Категория" ):
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"];