In my app i've some records in core data
and i want to fetch last 20 records in ascending order i.e.. if there is 30 records than i want to fetch records from 11 to 30 in ascending order -
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Messages" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchLimit:20];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"messageId" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"((userId == %@) && (frndId == %@) )",uid, fid];
[fetchRequest setPredicate:predicate];
NSError *error;
NSArray* dataArray = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
for (Messages* msg in dataArray) {
//code here
}
but it gives me first 20 records in ascending order and if i change to
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"messageId" ascending:NO];
then i got last 20 records but that was in ascending order?Any suggestion would be appreciated.
you can use -
//your code as it is till this line but with
//NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"messageId" ascending:NO];
NSArray* dataArray = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
NSArray *sortedArray;
sortedArray = [dataArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSString *first = [(Messages*)a messageId];
NSString *second = [(Messages*)b messageId];
return [first compare:second];
}];
for (Messages* msg in sortedArray) {
//your code
}
Happy coding :P