领域:按子对象中的属性排序

时间:2014-12-08 21:18:37

标签: ios swift realm

我的Show对象如下所示:

class Show: RLMObject {
    dynamic var venue: Venue?
}

和我的Venue对象:

class Venue: RLMObject {
    dynamic var title = ""
}

我需要能够通过Venue对象的标题对我的Show对象进行排序。我尝试了以下但是出现了错误:

allShowsByLocation = Show.allObjects().sortedResultsUsingProperty("venue.title", ascending: true)

错误是:排序列无效',原因:'列名为'(null)'没找到。

2 个答案:

答案 0 :(得分:9)

Realm尚不支持通过子属性对RLMResults进行排序。作为解决方法,您可以查询Venue并返回每个索引的链接对象:

allVenues = Venue.allObjects().sortedResultsUsingProperty("title", ascending: true)

func showAtIndex(index: UInt) -> Show {
  return (allVenues[index] as Venue).linkingObjectsOfClass("Show", forProperty: "venue")
}

或者您只需向venueTitle模型添加Show属性即可让您的查询正常运行:

allShowsByLocation = Show.allObjects().sortedResultsUsingProperty("venueTitle", ascending: true)

您还可以订阅GitHub issue #1199以关注我们在支持子属性排序方面的进展。

答案 1 :(得分:0)

当Realm不支持此功能时,我感到非常难过。 我为这个问题尝试了另一个解决方案,它运作良好

  • 将RLMResults中的所有对象复制到数组
  • 使用比较
  • 对Array中对象的子属性进行排序