是否可以通过RLMArray属性的计数对RLMResults进行排序?

时间:2015-12-08 07:39:19

标签: ios objective-c realm

我想通过这些对象的RLMResults属性的countRLMArray实例包含的对象进行排序。

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.

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

1 个答案:

答案 0 :(得分:3)

到目前为止,您只能按实际属性排序。我们希望在此处添加对您要实现的内容的支持,请参阅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
}];