1

我需要获取我的数据库并按 id 排序。例如,我在数据库中有 2 列,database_id 和 content。当我 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"]];
4

1 回答 1

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”的比较。特别是,包含数字的字符串根据其数值进行排序。

于 2013-04-10T12:34:15.283 回答