编辑:你甚至可以使用带有“sortedArrayUsingSelector”的自定义选择器吗?我使用[[ComicArray valueForKey:@“Name”] sortedArrayUsingSelector:@selector(caseInsensitiveCompare :)];
引发异常“无法识别选择器”。任何人都知道如何排序这个? ComicArray充满了ComicDB,它是一个包含.Name的自定义类。我正在尝试基于ComicDB.Name进行排序。
//atempt1
NSArray * comicArray2 = [[ComicArray valueForKeyPath:@"ComicDB.Name"] sortedArrayUsingSelector:@selector(compareByName:)];
//atempt2
NSArray * compicArray2 = [ComicArray sortedArrayUsingSelector:@selector(compareByName:)];
- (NSComparisonResult)compareByName:(id)other
{
return [[self valueForKeyPath: @"ComicDB.Name"] caseInsensitiveCompare:[other valueForKeyPath: @"ComicDB.Name"]];
}
谢谢, -Mike
答案 0 :(得分:3)
sortedArrayUsingSelector:对数组中的对象执行选择器以确定它们的顺序。 compareByName:方法应该在ComicDB类中。如果您定义了访问器,则以下实现将起作用。如果不这样做,请将Name
更改为valueForKey:@"Name"
。
- (NSComparisonResult)compareByName:(ComicDB *)other {
return [[self name] caseInsensitiveCompare:[other name]];
}
答案 1 :(得分:1)
2011年1月23日 我无法让这个工作。相反,我使用iOS 4.0排序方法:
NSArray * myArraySorted = [ComicArray sortedArrayUsingComparator:^(id obj1, id obj2)
{
return [[obj1 valueForKey:@"Name"] caseInsensitiveCompare: [obj2 valueForKey: @"Name"]];
// return [[obj1 Name] caseInsensitiveCompare: [obj2 Name]];
}];