2011-01-10 54 views
0

编辑:你甚至能够使用“sortedArrayUsingSelector”自定义选择器?我得到这个使用[[ComicArray valueForKey:@“Name”] sortedArrayUsingSelector:@selector(caseInsensitiveCompare :)];NSArray sortedArrayUsingSelector不断与SIGBART出错

抛出异常“无法识别选择器”。任何人都知道如何排序? 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

回答

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]]; 
          }]; 
3

sortedArrayUsingSelector:对所述阵列中的对象选择器来确定其顺序。 compareByName:方法应该在ComicDB类中。如果您定义了访问者,以下实现将会工作。如果您不这样做,请将Name更改为valueForKey:@"Name"

- (NSComparisonResult)compareByName:(ComicDB *)other { 
    return [[self name] caseInsensitiveCompare:[other name]]; 
} 
+0

嘿,对不起,花了这么长的时间来回应。我已经出城了。我仍然得到SIGBART - [NSObject(NSObject)doesNotRecognizeSelector:]。调试时,我甚至没有进入“compareByName”。 – Mausimo 2011-01-21 03:04:54