排序描述符不以字符串形式排序数字 - iphone

时间:2014-04-11 06:32:15

标签: ios nssortdescriptor

我在核心数据中保存了一些字符串

@" 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的滚动数对其进行排序。

2 个答案:

答案 0 :(得分:3)

在您的情况下,请使用NSSortDescriptor,如下所示:

[NSSortDescriptor sortDescriptorWithKey:@"statusIdNo"
                              ascending:YES
                               selector:@selector(localizedStandardCompare:)];

有关此比较的更多信息,请访问:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/SortDescriptors/Articles/Creating.html

编辑:

https://developer.apple.com/library/mac/documentation/cocoa/reference/CoreDataFramework/Classes/NSFetchRequest_Class/NSFetchRequest.html#jumpTo_29

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];