按字母顺序对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]]; }