NSArray
no garantiza que solo pueda almacenar una copia de un objeto dado, por lo que debe asegurarse de que lo haga usted mismo (o use NSOrderedSet
).
Dicho esto, hay un par de enfoques aquí. Si los objetos de su categoría implementan isEqual:
para que coincida con category_title, puede usar -indexOfObject:
.
Si no puede hacer eso (porque los objetos de categoría usan una definición diferente de igualdad), use -indexOfObjectPassingTest:
. Se necesita un bloque en el que pueda hacer cualquier prueba que desee para definir su "prueba"; en este caso, probar category_title
igualdad de cadenas.
Tenga en cuenta que estos están todos declarados para NSArray
, por lo que no los verá si solo está mirando el encabezado/documentación NSMutableArray
.
EDITAR: Ejemplo de código. Esto supone objetos de la clase CASCategory
con un NSString
propiedad categoryTitle
(no puedo llevar yo para poner subrayado en un nombre de 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");
}
Gracias. ¿Puedes publicar un fragmento de cómo usar indexOfObjectPassingTest? – jroyce
Por favor, mira mi edición. –
Ok, eso fue muy apreciado e hice exactamente lo que estaba pidiendo. – jroyce