【问题标题】:How to sort the relational data?如何对关系数据进行排序?
【发布时间】:2012-03-19 16:40:29
【问题描述】:

只是一个小问题:

我有一个与实体 Y 有一对多关系的实体 X

在 viewDidLoad 方法中,我获取所有 X 并按名称和升序对它们进行排序,它们显示在 tableView 中。

如果您在 tableView 中选择其中一个 X,则所有关系 Y 都将显示在第二个 tableView 中。 此提取的结果还包括每个 X 的所有关系 Y,因此我不必为 Y 进行额外提取 - 但这导致了我的问题: Y 的顺序是完全随机的(每次重新启动应用程序时也会发生变化) - 但我希望它们按日期排序(

这里是获取 - 代码

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Customer" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];

NSError *error = nil;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
    // Handle the error.
}

[self setCustomersArray:mutableFetchResults];

结果看起来像这样:

Entity X-1
 attribute-x-1
 attribute-x-2
 relation-attribute
  relation-entity-y-1
   attribute-y-1
   attribute-y-2
  relation-entity-y-1
   attribute-y-1
   attribute-y-2
Entity X-2
 attribute-x-1
 attribute-x-2
 relation-attribute
  relation-entity-y-1
   attribute-y-1
   attribute-y-2

也许这是一个更好的例子:

Customer
 name: Bert
 age: 10
 customerMeasureRealtions
  Measure
   score: 5
   date: 10.10.2010
  Measure
   score: 9
   date: 20.20.2000
Customer
 name: Steve
 age: 20
 customerMeasureRealtions
  Measure
   score: 7
   date: 07.07.2007

获取后,“客户”按“名称”排序。但是,如果我通过“客户”访问“措施”,“措施”的顺序是随机的,但我希望它们按“日期”排序。

用于访问度量的代码(“客户”是客户实体对象或模型), (“measuresForCustomer”是customerMeasureRealtions):

- (void)loadMeasureDataForCustomer:(Customer *)customer
{
NSSet *customerSet = customer.measuresForCustomer;
measuresArray = [NSMutableArray arrayWithArray:[customerSet allObjects]];
[measuresTable reloadData];
}

【问题讨论】:

  • 请提供更多代码。什么是“dpo”?
  • dpo = do ;) 我添加了一些信息/代码
  • 好的,你能告诉我们一些你如何访问这些措施的代码吗?
  • 当然,我在问题末尾添加了它

标签: ios sorting core-data entity-relationship nssortdescriptor


【解决方案1】:

我认为有两种方法可以做到这一点:

  1. 向您的数据库发起第二次查询并获取给定客户的“度量”。请查看 Core data, sorting one-to-many child objects 了解此内容。
  2. 将 NSSet 转移到 NSArray 中并就地排序。 NSSet 总是无序的。看看How to sort a NSArray alphabetically?。或者 Apple 的文档:sortedArrayUsingDescriptorsNSSortDescriptor

【讨论】:

  • 太棒了!我使用第一种方法是因为我认为使用核心数据按日期排序更容易。非常感谢XD
【解决方案2】:

使用 NSSet 的一种排序方法。

试试:

- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors

或者,如果您从 NSSet 中获取 NSArray,那么您可以在 NSArray 上选择一大堆排序方法:

Sorting
– sortedArrayHint
– sortedArrayUsingFunction:context:
– sortedArrayUsingFunction:context:hint:
– sortedArrayUsingDescriptors:
– sortedArrayUsingSelector:
– sortedArrayUsingComparator:
– sortedArrayWithOptions:usingComparator:

这些来自 NSArray 和 NSSet API 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    相关资源
    最近更新 更多