0

我的模型:

转化率

#import <Realm/Realm.h>
#import "ConvText.h"

@interface Conv : RLMObject

@property NSInteger c_id;
@property RLMArray<ConvText> *cts;

@end

转换文本.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];
4

1 回答 1

6

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

我们计划通过以下方式解决此问题

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

与此同时,不幸的是,您必须将 RLMArray 深度复制到 NSArray 中并对其进行排序:( 我们知道这很糟糕,但我们刚刚获得了在 C++ 级别重新排序关系的支持,因此我们将在下一个版本中修复该问题(0.86)

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

于 2014-09-17T17:12:59.473 回答