NSSortDescriptor 未正确排序整数
Posted
技术标签:
【中文标题】NSSortDescriptor 未正确排序整数【英文标题】:NSSortDescriptor not sorting integers correctly 【发布时间】:2012-03-27 22:13:18 【问题描述】:我正在尝试按日期然后开始时间排序。开始时间是从午夜开始的几分钟。因此,如果开始时间
- (NSFetchedResultsController *)fetchedResultsController
if (fetchedResultsController != nil)
return fetchedResultsController;
/*
Set up the fetched results controller.
*/
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Appointments" inManagedObjectContext:[[DataManager sharedInstance] managedObjectContext]];
[fetchRequest setEntity:entity];
[fetchRequest setIncludesPendingChanges:YES];
// Set the batch size to a suitable number.
//[fetchRequest setFetchBatchSize:20];
// Sort using the date / then time property.
NSSortDescriptor *sortDescriptorDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSSortDescriptor *sortDescriptorTime = [[NSSortDescriptor alloc] initWithKey:@"start_time" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorDate, sortDescriptorTime, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Use the sectionIdentifier property to group into sections.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[[DataManager sharedInstance] managedObjectContext] sectionNameKeyPath:@"date" cacheName:@"List"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
NSLog(@"FetchedController: %@", fetchedResultsController);
return fetchedResultsController;
我怎样才能正确地对整数进行排序?
【问题讨论】:
我希望您的 start_time(在您的核心数据对象模型中)是 NSNumber 对象而不是字符串。 【参考方案1】:如果 start_time 是一个字符串,那么它将按字母顺序排序,这意味着 aa
在 b
之前,这也意味着 11
在 2
之前。
要以更人性化的方式进行排序,请使用NSString
的localizedStandardCompare:
作为选择器。
[NSSortDescriptor sortDescriptorWithKey:@"start_time" ascending:YES selector:@selector(localizedStandardCompare:)]
【讨论】:
就是这样!谢谢。我将它作为字符串保存在我的核心数据中,因为它来自 API 作为字符串而不是数字。 这太棒了。正是我想要的。我遇到了我的字符串列以这种方式排序的问题 1,10,11,2,3,4... 上面的解决方案解决了它。 NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"dateTimeInSec" 升序:YES 选择器:@selector(localizedStandardCompare:)];崩溃了我的应用程序。 start_time 是 NSString 类型属性还是 NSNumber?错误是 -[__NSCFNumberlocalizedStandardCompare:]:无法识别的选择器发送到实例 0x16dc40c0 和 userInfo (null)以上是关于NSSortDescriptor 未正确排序整数的主要内容,如果未能解决你的问题,请参考以下文章
核心数据和 NSSortDescriptor 未根据基于 NSString 的第三个描述符排序