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 对 NSMutableArray 排序