Ordenar NSMutableArrays alfabéticamente

Tengo un NSMutableArray, llamado categories, que contiene un object llamado CategoryItem. CategoryItem tiene una propiedad NSString, * text. Ahora, ¿cómo orderaré este arreglo basado en la propiedad de text de los elementos? Lo siento si esto no tiene sentido, soy nuevo en todo esto.

He intentado esto:

[categories sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

Pero fracasó.

Esto se debe a que está intentando orderar la matriz en function de cada object, no en la cadena que contiene.

Debe usar una instancia de NSSortDescriptor para orderar su matriz. Puedes crear uno como este:

 NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"text" ascending:YES]; 

Entonces:

 [categories sortUsingDescriptors:[NSArray arrayWithObject:descriptor]]; 

Prueba esto:

 [categories sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { CategoryItem object1 = (CategoryItem)obj1; CategoryItem object2 = (CategoryItem)obj2; return [object1.text compare:object2.text]; }]; 

¡Espero que ayude!

Falló porque no implementó localizedCaseInsensitiveCompare para CategoryItem.

Si quieres hacer eso, implementa esa function para CategoryItem como

 - (NSComparisonResult)localizedCaseInsensitiveCompare:(CategoryItem *)anItem { return [anItem.stringProperty localizedCaseInsensitiveCompare:self.stringProperty]; } 

De alguna manera hiciste esto bien.

El problema es que estás tratando de orderar cadenas, pero no tienes cadenas, tienes artículos de categoría. Para mantener el mismo código, simplemente implementaría localizedCaseInsensitiveCompare: for CategoryItem. En esa function, compare el valor del text y devuelva el NSComparisonResult correcto. Probablemente algo como esto

 -(NSComparisonResult)localizedCaseInsensitiveCompare:(CategoryItem *)item2 { return [text localizedCaseInsensitiveCompare:[item2 text]]; }