我在核心数据中保存了一些字符串
@" 123",@" 1" ,@" 432",@" 90003",@" 4567",@" 1002"
这需要按升序排序,这是我编写的代码
NSFetchRequest *request1 = [[NSFetchRequest alloc] init];
[request1 setEntity:[NSEntityDescription entityForName:@"ABCD" inManagedObjectContext:context]];
[request1 setIncludesPendingChanges:NO];
sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"statusIdNo" ascending:YES selector:@selector(localizedStandardCompare:)];
[request1 setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
statusArray = [context executeFetchRequest:request1 error:nil];
但是这段代码并没有按照要求的方式对其进行排序。我在这里错过了什么吗?
编辑:
The Required Result : @"1" , @"123", @"432", , @"1002", @"4567", @"90003"
Whats coming now : @"123"@"432",@"1" , @"1002", @"90003", @"4567"
我想补充的另一件事是,数组不包含字符串。这些是核心数据实体对象。例如,它包含学生对象说的X类,其中包含所有学生的掷骰数,名称和标记作为其属性。我们需要根据存储为NSNumber的滚动数对其进行排序。
答案 0 :(得分:3)
在您的情况下,请使用NSSortDescriptor
,如下所示:
[NSSortDescriptor sortDescriptorWithKey:@"statusIdNo"
ascending:YES
selector:@selector(localizedStandardCompare:)];
有关此比较的更多信息,请访问:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/SortDescriptors/Articles/Creating.html
编辑:
的setIncludesPendingChanges
结果类型不支持值YES NSDictionaryResultType,包括聚合结果的计算 (例如最大和最小)。对于字典,数组返回 fetch反映了持久性存储中的当前状态,而不是 考虑到中的任何挂起的更改,插入或删除 上下文。
如果您需要将待处理的更改考虑在内,可以使用一些简单的内容 像max和min这样的聚合,你可以改为使用普通的fetch 请求,按所需属性排序,获取限制为1。
编辑2:
我的代码:
- (void) getAllObjects
{
NSManagedObjectContext *context;
context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSFetchRequest *request1 = [[NSFetchRequest alloc] init];
[request1 setEntity:[NSEntityDescription entityForName:@"Entity" inManagedObjectContext:context]];
[request1 setIncludesPendingChanges:NO];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"str" ascending:YES selector:@selector(localizedStandardCompare:)];
[request1 setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
NSArray *statusArray = [context executeFetchRequest:request1 error:nil];
for (Entity *ent in statusArray)
{
NSLog(@"%@", ent.str);
}
}
和结果:
2014-04-11 20:06:34.454 smth1[8918:60b] 1
2014-04-11 20:06:34.456 smth1[8918:60b] 123
2014-04-11 20:06:34.456 smth1[8918:60b] 432
2014-04-11 20:06:34.457 smth1[8918:60b] 1002
2014-04-11 20:06:34.457 smth1[8918:60b] 4567
2014-04-11 20:06:34.458 smth1[8918:60b] 90003
答案 1 :(得分:-1)
您可以尝试使用此排序描述符。
NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"statusIdNo.intValue" ascending:YES];