我创建简单的类学生与性能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