我創建簡單的類學生與性能NSSortDescriptor正確排序日期和字符串,這是自定義類的屬性,但正確排序整數
@property (strong,nonatomic) NSString* firstname;
@property (strong,nonatomic) NSString* lastname;
@property (strong,nonatomic) NSDate* dateOfBirth;
@property (assign,nonatomic) NSInteger index;
在那之後,我創造了這個類的任何對象,給了它名字,姓氏,日期和索引,將它們全部添加到self.InitialStudentsArray。並開始按dateOfBirth排序:
NSSortDescriptor* descriptorDate=[[NSSortDescriptor alloc]initWithKey:@"dateOfBirth" ascending:YES];
NSArray* descArray=[NSArray arrayWithObjects:descriptorDate, nil];
[self.InitialStudentsArray sortUsingDescriptors:descArray];
所以,結果很奇怪。排序之前和排序之後的數組具有不同的項目順序,但根本不按日期排序。
before sort (
"46 Alex Dupel 25 10 1991",
"236 Ivan Evstegneev 20 09 1980",
"179 Hugo Igonin 03 02 1992",
"189 Alexey Boronenko 06 11 1978")
after sort (
"236 Ivan Evstegneev 20 09 1980",
"179 Hugo Igonin 03 02 1992",
"189 Alexey Boronenko 06 11 1978",
"46 Alex Dupel 25 10 1991")
與名字和姓氏(即使使用選擇同樣的事情:
NSSortDescriptor* descriptorLastname=[[NSSortDescriptor alloc]initWithKey:@"lastname" ascending:YES selector:@selector(caseInsensitiveCompare:)];
這只是財產「指標」,這是NSInteger的工作
我還做了什麼。 ,我創建了一個只有student.dateOfBirth日期的數組,並且使用keyname self對它進行了排序,並且它可以工作!另一個實驗 - 我創建了帶有關鍵字「dateOfBirth」的字典數組,並按鍵名稱@「dateOfBirth」對它進行了排序,並且它也起作用!
我知道其他方法live sortUsingComparator,但爲什麼這個方法不能在日期和字符串中的屬性?
Upd 哦,夥計們,這是我的錯誤。我感謝你的所有答案,他們把我推到了哪裏,在哪裏搜索錯誤。當我發現它時,我感到非常慚愧。絕對愚蠢的錯誤。如果你有興趣,我用這種方式來初始化學生:
- (instancetype)init
{
self = [super init];
if (self) {
self.firstname=[self getFirstname];
self.lastname=[self getLastname];
self.dateOfBirth=[self getDateOfBirth];
}
return self;
}
-(NSString*) getFirstname {//some code...arrayOfFirstames...name=arc4random()...}
即,我偶爾會重新定義設置屬性的getter。三個全部。所以,當我每次使用新數值對數組進行排序時。 謝謝。
它們似乎是按降序排序的firstname。如果您希望使用字符串比較來正確排序,則應該更改日期格式。而不是「DD MM YYYY」使用「YYYY MM DD」。 – 2014-11-14 19:03:17
如果使用'[descriptorDate compareObject:self.InitialStudentsArray [0] toObject:self.InitialStudensArray [1]]',它會返回正確的值嗎? – 2014-11-14 19:06:10
@伊恩麥克唐納,我試過了,它可能會返回正確的值,並可能返回不正確。喜歡它不依賴於項目。喜歡它取決於別的.. – NikLanf 2014-11-14 19:38:03