2012-02-16 9 views
2

私は7 NSMutableArraysを含むNSMutableArray "日"、7レッスンを含む7 NSMutableArraysを持っています。NSMutableArray sortUsingDescriptors

@interface Lesson : NSObject <NSCoding>{ 
    NSString *time1; 
    NSString *time2; 
    NSString *predmet; 
    NSString *namPrepod; 
    NSString *zamet; 
} 

私はsortedArrayUsingComparatorでソートをしていた前に、今私はsortedArrayUsingDescriptorsでソートしなければなりません。

sortedArrayUsingComparator

sortedArrayUsingDescriptorsでソートする方法を
chetNedel.sunday = [NSMutableArray arrayWithArray:[chetNedel.sunday sortedArrayUsingComparator:^(id cont1, id cont2) { return [[(Lesson *) cont1 time1] compare:[(Lesson *) cont2 time1]]; }]]; 
[chetNedel.days removeObjectAtIndex:0]; 
[chetNedel.days insertObject:chetNedel.sunday atIndex:0]; 

のように見えますか?

答えて

3

これは、並べ替えたいNSMutableArrayで使用する方法です。

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors 

レッスンオブジェクトの配列をソートする必要があります。 NSArrayパラメータは、NSSortDescriptorオブジェクトの配列になります。

NSSortDescriptorは、オブジェクトのプロパティに基づいてオブジェクトをソートする方法を記述します。したがってレッスンオブジェクトをソートする場合は、あなたが持っている文字列プロパティの一部またはすべてをソートします。

これはレッスンオブジェクトのソート記述子で、time1プロパティでソートされます。

NSSortDescriptor *time1Descriptor = [[NSSortDescriptor alloc] initWithKey:@"time1" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; 

keyパラメータは、比較するオブジェクトプロパティです(time2、premedtなどを使用できます)。 ascendingプロパティは、ソートされた値を昇順または降順に返すかどうかを示すブール値です。 selectorプロパティは、オブジェクトのプロパティを比較するために使用されるメソッドです。

ここではソートディスクリプタのNSArrayに戻ります。この時点で、並べ替え記述子の配列を構築し始めます。

NSArray *sortDescriptorArray = [[NSArray alloc] initWithObjects:time1Descriptor, nil]; 

、元のメソッドにソート記述子のこの配列を渡す:レッスンの- (void)sortUsingDescriptors:(NSArray *)sortDescriptors

[myArrayOfLessions sortUsingDescriptors:sortDescriptorArray]; 

あなたの元の配列は今ソートされます。