我使用NSSortDescriptor以日期为关键字对对象进行排序。我的代码:
NSLog(@"Before sorting: %@", temp);
NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"date" ascending: YES];
NSArray *sortedArray2 = [temp sortedArrayUsingDescriptors:[NSArray arrayWithObject: dateSortDescriptor]];
NSLog(@"After sorting: %@", sortedArray2);
NSMutableArray *afterSorting = [[(NSArray*)sortedArray2 mutableCopy]autorelease];
日期
时效果很好22/08/2012
23/08/2012
25/09/2012
但是,我发现NSSortDescriptor似乎只按前面两个数字排序,因为当我的日期变化一点时,我的结果就是这样:
10/09/2012
22/08/2012
23/08/2012
任何人都可以建议吗?使用NSSortDescriptor看到许多其他帖子与我上面的代码类似,但它们似乎没有任何错误。对我来说,它只按当天而不是月份排序!我所做的是对距离较近的对象进行排序。谢谢!
答案 0 :(得分:1)
您展示的排序顺序实际上是正确的。问题是你要排序字符串而不是日期。如果可能,请使用date
的实例填充NSDate
属性,而不是NSString
的实例,然后排序将按预期执行。
如果由于某种原因你不能在NSDate
属性中使用date
个实例(这看起来有点奇怪,但谁知道),你可以通过发送一个{来对数组进行排序{1}}消息,并传入定义自定义排序的块。
答案 1 :(得分:0)
排序工作正常,因为它只比较字符串。因此,您首先需要将NSDate转换为NSString,然后对NSDate执行排序操作,并恢复到日期的排序字符串数组,如下所示:
- (NSArray *) sortArrayOfDateStrings:(NSArray*)array {
NSMutableArray *sortedArray = [NSMutableArray arrayWithCapacity:0];
NSMutableArray *sortedDateArray = [NSMutableArray arrayWithCapacity:0];
NSDate *dateObject;
for(NSString *dateString in array){
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:dateString];
[dateFormatter release];
[sortedArray addObject:dateFromString];
}
NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"date" ascending: YES];
[sortedDateArray addObjectsFromArray:[sortedArray sortedArrayUsingDescriptors:[NSArray arrayWithObject: dateSortDescriptor]]];
[sortedArray removeAllObjects];
for (NSDate* sortedDate in sortedDateArray){
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
NSString *strDate = [dateFormatter stringFromDate:sortedDate];
NSLog(@"%@", strDate);
[dateFormatter release];
[sortedArray addObject:strDate];
}
return sortedArray
}