2016-11-07 92 views
0

我有一个“importData”函数,它从API中抓取一堆JSON并将其填充到领域数据库中。该JSON的部分看起来像:领域结果按回调排序

files: [ 
    300, 
    19, 
    102 
] 

的编号与ID在这我已经让这些之前处理/进口JSON的顺序部分,基本上是一个属于该文件列表组。

这是仿照像这样在我的领域对象:

class SomeGroup : Object { 
    let files = List<File>() 
} 

我需要保留这些ID的排序顺序,这样,当我连接起来,文件的关系,该文件是在正确的顺序。

为了抢档车型,我需要连接起来,我运行一个查询,如下所示:

let thefiles = realm.objects(File.self).filter("id IN %@", fileIds) 

的问题是这样返回它们以不同的顺序和.sorted方法只能排序模型属性(从我可以告诉从文档)。

我认为通过结果循环,并从Result<File>型转向他们基本Array<File>List<File>类型,这样我就可以自己进行排序,但那样会丧失境界指针信息,因此我希望境界不能够创建链接。

唯一的另外一件事是查询每个文件并将其分别追加到组文件关系中,但是如果我这样做,查询数量将会飞涨。

有人能告诉我通过自定义函数/回调订购Result<File>类型的最佳方式,以便它匹配来自json的我的id数组吗?

+0

如果该文件被添加到集合中的顺序是有关你的模型和工作流,那么你应该添加一个“订单”关键模型('File'对象)。您在迭代JSON输入并创建'File'对象时设置它,并且稍后在查询中使用它以获取正确的顺序。 –

+0

@bogdanf这是一个多对多的关系。要设置订单键,我必须在关系上放置订单(类似于MySQL中的数据透视表上的额外列)。 – TRG

+0

是的,正确的,为什么不创建一个“关系”对象,其中包含组和文件的链接以及文件的顺序? –

回答

0

维持Realm中一组对象排序的最佳做法是将它们存储在List对象中。如果您可以调整自己的逻辑以访问财产,那么这似乎是最佳方法。

除此之外,您可以考虑创建一个全新的Realm Object模型,其作用是简单地管理文件的有序列表。

class FileList : Object { 
    let files = List<File>() 
} 
+0

你建议的正是我开始使用的事实,并利用事实列表维护它们的排序顺序。问题是List是从错误顺序的领域结果查询中创建的。因为关系是多对多的,所以我不能在文件对象上将整个顺序存储为一个整数(根据所显示的组,文件位于不同的位置)。我希望能够使用自定义排序功能对列表进行排序,但排序领域结果对象不允许这样做。我最终结束了一个中间透视对象,因为我无法解决这个问题 – TRG