NSArray sortedArrayUsingSelector与SIGABRT保持错误

时间:2011-01-10 04:36:41

标签: iphone sorting nsarray

编辑:你甚至可以使用带有“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

2 个答案:

答案 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]];
                          }];