RLMArray - 从Object检索数组

Vic*_*tor 0 objective-c realm ios

我的模特:

Conv.h

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

@interface Conv : RLMObject

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

@end
Run Code Online (Sandbox Code Playgroud)

ConvText.h

#import <Realm/Realm.h>

@interface ConvText : RLMObject

@property NSInteger ct_id;
@property NSInteger time;

@end

RLM_ARRAY_TYPE(ConvText)
Run Code Online (Sandbox Code Playgroud)

当我试图从Conv中提取ConvTexts时:

Conv *c = [Conv objectsWhere:@"c_id = %@",@(1)];
ConvText *ct = [c.cts arraySortedByProperty:@"time" ascending:NO][0]; <--
Run Code Online (Sandbox Code Playgroud)

我收到此消息:'RLMException',原因:'此方法只能在从RLMRealm检索到的RLMArray实例中调用'

我也尝试这样:

RLMArray *cts = c.cts;
ConvText *ct = [cts arraySortedByProperty:@"time" ascending:NO][0];
Run Code Online (Sandbox Code Playgroud)

tim*_*ade 6

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

我们计划解决这个问题

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

与此同时,你不幸的是必须将RLMArray深度复制到NSArray并对其进行排序:(我们知道它很糟糕,但我们只是支持在C++级别重新排序关系,所以我们将在下一个版本中修复它(0.86)

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

  • 谢谢你的精彩解释.PS尽管如此,领域易于使用且功能强大的DB.最好的祝福! (2认同)