如何在iOS中对日期参数进行排序?

时间:2015-04-02 18:38:58

标签: core-data nsdate

我从数据库(coredata)获取数据并尝试排序日期(startDate)。最初我有时代格式的日期(如1427736600,1427736611等),我正在转换为NSDate格式并尝试排序但是我在排序过程中遇到了崩溃。我不知道我在哪里做错了。这是我的代码。谢谢

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Sessions"];
fetchRequest.predicate= [NSPredicate predicateWithFormat:@“element == %@", element];

NSArray *storedSessions = [appDelegate.managedObjectContext executeFetchRequest:fetchRequest error:nil];

NSArray *sortedArray=[[NSMutableArray alloc]init];

if (storedSessions.count>0)
{
for (Sessions * listData in storedSessions)
{
    double time=[listData.startDate doubleValue];

    NSDate *returnDate = [NSDate dateWithTimeIntervalSince1970:time];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy h:mm aa"];
    NSString *dateStr1=[dateFormatter stringFromDate:returnDate];

    sortedArray = [storedSessions sortedArrayUsingComparator:^NSComparisonResult(NSString *dateStr1, NSString *obj2) {
        NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
        [dateFormater setDateFormat:@"dd-MM-yyyy h:mma"];
        NSDate *date1 = [dateFormater dateFromString:dateStr1];
        NSDate *date2 = [dateFormater dateFromString:obj2];
        NSComparisonResult compareResult = [date1 compare:date2];
        switch (compareResult)
        {
            case NSOrderedAscending:
                return NSOrderedDescending;
                break;
            case NSOrderedDescending:
                return NSOrderedAscending;
                break;
            default:
                return compareResult;
                break;
        }
    }];

  }

NSLog(@"%@",sortedArray);}

1 个答案:

答案 0 :(得分:0)

你工作太辛苦了。

看看NSSortDescriptor。构建一个按存储纪元秒的整数字段排序,并在获取请求中传递它。根据您的喜好,您将获得按时期秒,升序或降序排序的数组。

而且,你工作太辛苦了。您可以将NSDate直接存储到Core Data中,作为Date类型的属性。