【问题标题】:Is it possible to sort RLMResults by the count of an RLMArray property?是否可以按 RLMArray 属性的计数对 RLMResults 进行排序?
【发布时间】:2023-03-29 19:21:01
【问题描述】:

我想按照这些对象的RLMArray 属性的countRLMResults 实例包含的对象进行排序。

Person.h:

@interface Person : RLMObject

@property RLMArray *children;

@end

SomeClass.m:

...
RLMResults *people = [Person allObjects];
RLMResults *sorted = [people sortedResultsUsingProperty:@"children.count" ascending:YES];
...

如上所述使用- sortedResultsUsingProperty: 不起作用,但是会报错:Cannot sort on 'people.count': sorting on key paths is not supported.

解决这个问题的最佳方法是什么?

【问题讨论】:

  • 我认为您可能只是语法稍有错误,如果您尝试使用 children.@count 会怎样?
  • 我也试过了,但在这两种情况下都会出现相同的错误:Cannot sort on 'people.@count': sorting on key paths is not supported.

标签: ios objective-c realm


【解决方案1】:

到目前为止,您只能按实际属性排序。我们想在此处添加对您想要实现的目标的支持,请参阅issue #1277 以供参考。现在您需要引入一个属性childrenCount,您将手动维护它并与children 保持同步。或者,您可以将结果提取到 NSArray 并通过 Foundation 的 API以类似方式对其进行排序。

后一个提议可以像这里所示的那样实施:

RLMResults *people = [Person allObjects];
NSArray *peopleObjects = [people valueForKey:@"self"];
NSArray *sortedPeople [peopleObjects sortedArrayUsingComparator: ^(Person *a, Person *b) {
    return a.children.count < b.children.count
}];

【讨论】:

  • 感谢您的回复!但是,如果我将结果提取到NSArray 中,我仍然无法使用@"children.count" 的键对NSSortDescriptor 进行排序,因为我收到错误this class is not key value coding-compliant for the key count. 你有什么建议以另一种方式排序吗?
  • 你必须使用@count
  • 但事实证明,进一步的技术限制将阻止您使用NSSortDescriptor:我们的集合类型确实还不符合 KVC 集合运算符。这由issue #2937 跟踪。所以你需要排序,例如通过使用 - [NSArray sortedArrayUsingComparator:] 提供的基于块的 API。
  • @marius 你能告诉我如何将 NSArray 转换为 RLResults 吗?
  • @user3182143: NSArray 是一个基于 Foundation 的集合,可以保存任意单个对象。RLMResults 是一种只读数据结构,用于表示查询的结果,而不需要提取一个对象的所有对象类进入记忆。您不能自己实例化此类的对象。所以没有办法转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多