Подтвердить что ты не робот

Как получить индекс объекта в NSArray с использованием строкового значения?

Я хочу получить индекс объекта в категориях NSMutableArray.

Объект категории имеет атрибут "category_title", и я хочу получить индекс, передав значение category_title.

Я просмотрел документы и не могу найти простой способ сделать это.

4b9b3361

Ответ 1

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");
    }

Ответ 2

Не уверен, что я понимаю вопрос, но что-то вроде этого может работать (если Mutable Array содержит объекты класса "Категория" ):

int indx;
bool chk;
for (Category *aCategory in theArray) 
{
    chk = ([[aCategory category_title] isEqualToString:@"valOfCategoryTitle"])
    if ( chk )
        indx = [theArray indexOfObject:aCategory];
}

Ответ 3

Попробуйте этот код намного проще: -

int f = [yourArray indexOfObject:@"yourString"];