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),并且该方法仅在查询结果中可用,但我们当然也应该考虑将其添加到关系中!
我们计划通过
- 在两个独立的类中分离查询结果和关系
- 允许(大多数)查询方法在关系上被调用。
与此同时,你不得不深入复制RLMArray到一个NSArray中并对其进行sorting:(我们知道它很糟糕,但我们只是得到了在C ++级别重新sorting关系的支持,所以我们将在下一个版本中修复(0.86)
我们的错误信息应该更加明确 – 我们将尽快解决。