我有一个名为categories的NSMutableArray,它包含一个名为CategoryItem的对象。 CategoryItem有一个NSString属性,* text。现在,我将如何根据元素的text属性对此数组进行排序?对不起,如果这没有意义,我对这一切都是新手。
我试过了:
[categories sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
但它失败了。
答案 0 :(得分:10)
那是因为您尝试根据每个对象对数组进行排序,而不是根据它包含的字符串进行排序。
您需要使用NSSortDescriptor实例对数组进行排序。你可以创建一个这样的:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"text" ascending:YES];
然后:
[categories sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];
答案 1 :(得分:7)
试试这个:
[categories sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
CategoryItem object1 = (CategoryItem)obj1;
CategoryItem object2 = (CategoryItem)obj2;
return [object1.text compare:object2.text];
}];
希望有所帮助!
答案 2 :(得分:4)
它失败了,因为你没有为CategoryItem实现localizedCaseInsensitiveCompare。
如果您想这样做,请为CategoryItem实现该功能,如
- (NSComparisonResult)localizedCaseInsensitiveCompare:(CategoryItem *)anItem
{
return [anItem.stringProperty localizedCaseInsensitiveCompare:self.stringProperty];
}
答案 3 :(得分:2)
你有点做对了。
问题是你正在尝试排序字符串,但是你没有字符串,你有CategoryItems。要保留相同的代码,您只需为CategoryItem实现localizedCaseInsensitiveCompare:
。在该函数中,比较文本值并返回正确的NSComparisonResult
。可能是这样的
-(NSComparisonResult)localizedCaseInsensitiveCompare:(CategoryItem *)item2 {
return [text localizedCaseInsensitiveCompare:[item2 text]];
}