按字母顺序对NSMutableArrays进行sorting

我有一个叫做categories的NSMutableArray,它包含一个名为CategoryItem的对象。 CategoryItem有一个NSString属性*文本。 现在我将如何根据元素的文本属性对这个数组进行sorting? 对不起,如果这没有意义,我是新来的这一切。

我试过这个:

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

但是失败了。

这是因为你正在尝试基于每个对象对数组进行sorting,而不是对其包含的string进行sorting。

您需要使用NSSortDescriptor的实例对数组进行sorting。 你可以像这样创build一个:

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

然后:

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

尝试这个:

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

希望有所帮助!

由于您没有为CategoryItem实现localizedCaseInsensitiveCompare,因此失败。

如果你想这样做,像CategoryItem一样为CategoryItem实现该函数

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

你有这样做的权利。

问题是你正在尝试sortingstring,但你没有string,你有CategoryItems。 要保持相同的代码,您只需实现localizedCaseInsensitiveCompare: for CategoryItem。 在该函数中,比较文本值并返回正确的NSComparisonResult 。 可能是这样的事情

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