Sort array of objects by their NSDate property

25,088

Solution 1

Thanks for all the answers, I came across this answer that solved my problem.Check NSGod's answer

Here is the code thanks to user: NSGod:

NSSortDescriptor *dateDescriptor = [NSSortDescriptor
                                 sortDescriptorWithKey:@"startDateTime" 
                                             ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor];
NSArray *sortedEventArray = [nodeEventArray
     sortedArrayUsingDescriptors:sortDescriptors];

Solution 2

    NSSortDescriptor* sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"nsdatepropertyname" ascending:YES];
    [mutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortByDate]];

Solution 3

You can use:

   NSArray *sortedArray = [mutableArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        NSDate *first = [(Person*)a birthDate];
        NSDate *second = [(Person*)b birthDate];
        return [first compare:second];
    }];

Or see this link

Solution 4

You can override the compare method in your custom class so that it compares two objects of your custom class and returns the appropriate NSComparisonResult according to the dates on the objects.

Eg:

-(NSComparisonResult)compare:(YourClass*)otherObject
{
   return [self.date compare:otherObject.date];
}

Solution 5

There is a method called -[NSArray sortedArrayUsingComparator:]. It takes a block in which you can implement any comparison you see fit for your objects.

Share:
25,088
some_id
Author by

some_id

Updated on October 17, 2020

Comments

  • some_id
    some_id over 3 years

    Possible Duplicate:
    How to sort an NSMutableArray with custom objects in it?

    How does one sort an array of objects by accessing their NSDate properties?

    I know one can use [mutableArray sortUsingSelector:@selector(compare:)]; on an array of dates, but how does one do it by accessing a NSDate property on each element in the array, sorting the objects by earliest date to latest date?

  • Mike Sprague
    Mike Sprague almost 10 years
    To make it slightly more concise, you could write the second line like this: [mutableArray sortUsingDescriptors:@[sortByDate]];
  • Gabriel Osorio
    Gabriel Osorio over 9 years
    To clarify a bit more (if needed), sortUsingDescriptors: returns the sorted NSArray. You'll probably want to assign that to another variable and take it from there as done on Helium3's answer.