【问题标题】:Core Data Sort Fetched Request核心数据排序获取请求
【发布时间】:2013-04-02 03:16:35
【问题描述】:

我需要获取我的数据库并按 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"]];

【问题讨论】:

  • 您的带有排序描述符的代码对我来说看起来不错。究竟什么不起作用?
  • 排序很好,但我遇到了 NSString/Number 的问题。 database_id 类似于 1, 11, 15, 2, 3, 5....

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


【解决方案1】:

您的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”的比较。特别是,包含 数字按其数值排序。

【讨论】:

  • 然后“内容”(这是另一个数据库列)也会根据哪个 id 属于哪个内容进行排序,还是只对 id 进行排序?
  • @user1832330:result数组是按照id排序的,所以内容列也是按照id排序的。所以它应该像你期望的那样工作。
  • 非常感谢,将测试它然后看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 2018-02-11
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
相关资源
最近更新 更多