核心数据按升序获取最后20条记录?

Bli*_*ios 4 core-data objective-c nsfetchrequest ios

在我的应用程序中我有一些记录core data,我想按升序获取最后20条记录,即.如果有30条记录,我想按升序从11到30获取记录 -

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
} 
Run Code Online (Sandbox Code Playgroud)

但它按升序给我前20条记录,如果我改为

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                                  initWithKey:@"messageId" ascending:NO];
Run Code Online (Sandbox Code Playgroud)

然后我有最后20条记录,但是按升序排列?任何建议都会受到赞赏.

Dai*_*jan 9

你不能设置这个偏移?

//assume it fits an nsinteger
NSInteger count = [managedObjectContext countForFetchRequest:fetchRequest /*the one you have above but without limit */ error:&error];

NSUInteger size = 20;
count -= size;
[fetchRequest setFetchOffset:count>0?count:0];
[fetchRequest setFetchLimit:size];
NSArray* dataArray = [managedObjectContext executeFetchRequest:fetchRequest error:&error]
Run Code Online (Sandbox Code Playgroud)