【问题标题】:RLMArray - retrieve Array from ObjectRLMArray - 从对象中检索数组
【发布时间】:2014-09-17 10:36:28
【问题描述】:

我的模特:

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

【问题讨论】:

    标签: ios objective-c realm


    【解决方案1】:

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

    我们计划解决这个问题

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

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

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

    【讨论】:

    • 感谢您的精彩解释。附言尽管如此,realm 易于使用且功能强大的数据库。最好的问候!
    • 刚刚尝试在关系上调用“objectsWhere”并以同样的异常结束。有这个工作会很好。
    • 我遇到了与 zvonicek 相同的问题,只是我正在尝试使用 ObjectsWithPredicate:
    • 我们这周实际上正在努力。我们在github.com/realm/realm-cocoa 的主分支中已经提交了一些事情,在进行中的分支中还有更多的事情。对于造成的混乱,我们深表歉意!
    • Sinde 2014-10-21 他们已经将RLMArray 分成两个具有不同关注点的类。它是 0.87.0 版本,请查看他们的 github
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2021-05-13
    • 2020-01-21
    • 1970-01-01
    相关资源
    最近更新 更多