核心数据排序提取请求

时间:2013-04-10 10:21:21

标签: iphone objective-c arrays sorting core-data

我需要获取我的数据库并按ID排序。例如,我在数据库,database_id和内容中有2列。当我在NSLOG的最后一行时,我获得了所有“内容”列的行。但我需要根据database_id排序那些“内容”行,即1,2,3,4,5,6(升序)。帮助???

 NSFetchRequest *request = [[NSFetchRequest alloc] init];

    NSEntityDescription *ent = [NSEntityDescription entityForName:@"databaseName" inManagedObjectContext:self.managedObjectContext];
    [request setEntity:ent];

    NSSortDescriptor *srt = [NSSortDescriptor sortDescriptorWithKey:@"database_id" ascending:YES];

    [request setSortDescriptors:[NSArray arrayWithObject:srt]];

    NSError *error;
    NSArray *result = [self.managedObjectContext executeFetchRequest:request error:&error];

    if (!result)
    {
        //error
    }
    NSMutableArray *myArray = [[NSMutableArray alloc] initWithArray:[result valueForKey:@"content"]];

1 个答案:

答案 0 :(得分:3)

您的database_id存储为字符串,因此ID按字符串排序:

1, 11, 15, 2, 3, 5

最好的解决方案是将database_id存储为数字(例如“整数32”) 数据库中。

作为一种解决方法,您可以保留字符串,并在中使用特殊的比较函数 排序描述符:

NSSortDescriptor *srt = [NSSortDescriptor sortDescriptorWithKey:@"database_id"
                 ascending:YES
                  selector:@selector(localizedStandardCompare:)];

localizedStandardCompare执行“Finder-like”比较。特别是,包含的字符串 数字按其数值排序。