RLMArray – 从对象中检索数组

我的模特:

Conv.h

#import <Realm/Realm.h> #import "ConvText.h" @interface Conv : RLMObject @property NSInteger c_id; @property RLMArray<ConvText> *cts; @end 

ConvText.h

 #import <Realm/Realm.h> @interface ConvText : RLMObject @property NSInteger ct_id; @property NSInteger time; @end RLM_ARRAY_TYPE(ConvText) 

当我试图从Conv中提取ConvText时:

 Conv *c = [Conv objectsWhere:@"c_id = %@",@(1)]; ConvText *ct = [c.cts arraySortedByProperty:@"time" ascending:NO][0]; <-- 

我得到这个消息: 'RLMException',原因:'这个方法只能在从RLMRealm检索到的RLMArray实例中调用'

我也尝试这样的:

 RLMArray *cts = c.cts; ConvText *ct = [cts arraySortedByProperty:@"time" ascending:NO][0]; 

由于后台查询结果和关系是两种不同types的实体,即使它们通过相同的类(RLMArray)公开,您也会得到此错误。 在这种情况下,您正在关系上调用Query方法(arraySortedByProperty),并且该方法仅在查询结果中可用,但我们当然也应该考虑将其添加到关系中!

我们计划通过

  1. 在两个独立的类中分离查询结果和关系
  2. 允许(大多数)查询方法在关系上被调用。

与此同时,你不得不深入复制RLMArray到一个NSArray中并对其进行sorting:(我们知道它很糟糕,但我们只是得到了在C ++级别重新sorting关系的支持,所以我们将在下一个版本中修复(0.86)

我们的错误信息应该更加明确 – 我们将尽快解决。