我的模特:
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 中提取 ConvTexts 时:
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];
答案 0 :(得分:6)
您收到此错误是因为在幕后查询结果和关系是两种不同类型的实体,即使它们是通过同一个类(RLMArray)公开的。在这种情况下,您正在关系上调用Query方法(arraySortedByProperty),并且该方法仅适用于查询结果,但我们也应该考虑将其添加到关系中!
我们计划通过
解决这个问题与此同时,您不得不将RLMArray深度复制到NSArray并对其进行排序:(我们知道它很糟糕但我们只是支持在C ++级别重新排序关系,所以我们将修复它下一个版本(0.86)
我们的错误信息也应该更明确 - 我们会尽快修复它。