我的模特:

转化率

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

@interface Conv : RLMObject

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

@end


转换文本

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

最佳答案

之所以会出现此错误,是因为在后台查询结果和关系是两种不同类型的实体,即使它们是通过同一类(RLMArray)公开的。在这种情况下,您要在Relationship上调用Query方法(arraySortedByProperty),该方法仅在Query结果上可用,尽管我们当然也应该考虑将其添加到Relationships中!

我们计划通过


将查询结果和关系分为两个单独的类
允许在“关系”上调用(大多数)查询方法。


同时,很遗憾,您必须将RLMArray复制到NSArray并进行排序:(我们知道它很烂,但是我们只是获得了在C ++级别对关系进行重新排序的支持,因此我们将在下一版本中修复该问题。 (0.86)

我们的错误消息也应该更加明确-我们将尽快对其进行修复。

07-28 06:25