NSSortDescriptor 不排序 NSArray

Posted

技术标签:

【中文标题】NSSortDescriptor 不排序 NSArray【英文标题】:NSSortDescriptor not sorting NSArray 【发布时间】:2015-07-09 14:16:43 【问题描述】:

我已经被这个问题困扰了一段时间,我把它带到这里寻求帮助。出于某种原因,我无法让NSSortDescriptor 在获取请求后对数据数组进行排序。以下是请求的代码:

+ (NSArray *)retrieveCommentsOfPost:(Post *) post withLimit:(int) limit

    NSManagedObjectContext *context        = [self appDelegate].managedObjectContext;
    NSFetchRequest         *request        = [[NSFetchRequest alloc] init];
    NSSortDescriptor       *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:NO];

    //    request.sortDescriptors = @[sortDescriptor];

    [request setSortDescriptors:@[sortDescriptor]];

    request.fetchLimit = limit;
    request.entity     = [NSEntityDescription entityForName:@"Comment" inManagedObjectContext:context];
    request.predicate  = [NSPredicate predicateWithFormat:@"post = %@", post];

    NSLog(@"post: %@", post);

    NSError *executeFetchError = nil;
    NSArray *result            = [context executeFetchRequest:request error:&executeFetchError];

    return result;

返回的结果似乎完全忽略了sortDescriptor,我不确定需要发生什么才能使其正常工作。

大家有什么建议吗?

编辑:更新:看起来 NSSortDescriptor 确实在工作,但它在代码的其他地方被忽略了:

-(void) loadTableData
[[PaperbackServiceClient sharedInstance]retrieveCommentsOnPost:[self.post.post_id longValue] WithBlock:^(BOOL success, id json) 
    if(success)
        _comments = json;

        NSLog(@"COMMENTS JSON: %@", json);

        // year-mo-da 00:00:00 + 0000

        [self.tableView reloadData];
    
];

【问题讨论】:

【参考方案1】:

找到答案:

loadTableData 方法中,JSON 没有保持原始调用的顺序,因此我将NSSortDescriptor 放在了loadTableData 方法中:

-(void) loadTableData
[[PaperbackServiceClient sharedInstance]retrieveCommentsOnPost:[self.post.post_id longValue] WithBlock:^(BOOL success, id json) 
    if(success)

        NSSortDescriptor       *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:YES];

        _comments = [json sortedArrayUsingDescriptors:@[sortDescriptor]];
        NSLog(@"COMMENTS JSON: %@", json);

        [self.tableView reloadData];
    
];

【讨论】:

以上是关于NSSortDescriptor 不排序 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSSortDescriptor 对 NSOrderedSet 进行排序

NSSortDescriptor对象进行数组排序

NSSortDescriptor 未正确排序整数

利用 NSSortDescriptor 对 NSMutableArray 排序

iPhone:无法对多对关系进行 NSSortDescriptor。如何排序?

使用 NSSortDescriptor 按时间倒序对 CoreData 进行排序