RLMArray - 从Object检索数组

时间:2014-09-17 10:36:29

标签: ios objective-c realm

我的模特:

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];

1 个答案:

答案 0 :(得分:6)

您收到此错误是因为在幕后查询结果和关系是两种不同类型的实体,即使它们是通过同一个类(RLMArray)公开的。在这种情况下,您正在关系上调用Query方法(arraySortedByProperty),并且该方法仅适用于查询结果,但我们也应该考虑将其添加到关系中!

我们计划通过

解决这个问题
  1. 在两个单独的类中分隔查询结果和关系
  2. 允许(大多数)在关系上调用查询方法。
  3. 与此同时,您不得不将RLMArray深度复制到NSArray并对其进行排序:(我们知道它很糟糕但我们只是支持在C ++级别重新排序关系,所以我们将修复它下一个版本(0.86)

    我们的错误信息也应该更明确 - 我们会尽快修复它。