2011-01-10 6 views
0

EDIT: "sortedArrayUsingSelector"でカスタムセレクタを使用することはできますか?私は[[ComicArray valueForKey:@ "Name"] sortedArrayUsingSelector:@selector(caseInsensitiveCompare :)]を使ってこれを動作させました。NSArray sortedArrayUsingSelectorはSIGBARTでエラーを発生し続けます

例外 "セレクタを認識しません"がスローされます。誰もこれを並べ替える方法を知っていますか? ComicArrayは、.Nameを含むカスタムクラスであるComicDBで埋められます。 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

1月23 2011 私はこれを動作させることができませんでした。代わりに、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クラスに存在する必要があります。アクセサーが定義されている場合は、次の実装が有効です。そうでない場合はNamevalueForKey:@"Name"に変更してください。

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

ごめんなさい。私は町から出ました。私はまだSIGBART - [NSObject(NSObject)doesNotRecognizeSelector:]を取得しています。デバッグするときに、私は "compareByName"になっていません。 – Mausimo

+0

配列内のオブジェクトはComicDBオブジェクトですか?コンソールには、エラーを投げるオブジェクトのクラス名が必要です。これはcompareByName:を持っているところです。 – ughoavgfhw

+0

ComicArrayのオブジェクトはComicDB *で、ComicDB *はNSManagedObjectsと答えています – Mausimo

関連する問題