0

我研究了 Realm 的文档并了解可用于管理对象组的各种类。据我了解,有 RLMArrays、RLMLinkingObjects 和 RLMResults。我将使用一个带有许多 Comments 类对象的 Blog 类示例来设置我的问题。假设 Blog 类可以有 10000 个对象,每个 Blog 对象可以有 1000 个 Comments,我不清楚如何最好地在 Realm 中表达关系。我可以使用评论的 RLMArray 作为博客的属性。然后我将不得不管理博客和评论的反向链接。这将我引向 RLMLinkingObjects,因为我可以将博客上的评论属性表示为链接回博客的任何评论。然后是复杂的博客和评论比我想一次实例化的要多。这就是 RLMResults 选项很有吸引力的地方,因为它允许对象被延迟实例化。然而,这改变了我与对象交互的方式,因为我现在将查询与博客相关联的评论,而不是简单地访问属性(例如 blog.comments)。

我在这里遗漏了一个重要的考虑因素,即这些数据都驻留在服务器上,但我希望首先在本地(具有持久性)定义对象模型,然后弄清楚如何通过 REST 将模型映射到服务器.

我会喜欢 Realm 用户的任何意见、想法或建议。

谢谢!

4

1 回答 1

0

是的!你在正确的轨道上。一个Blog对象可以有多个Comment分配给它的对象,因此使用一个RLMArray属性Blog来管理它的所有注释是合适的。然后,您可以使用RLMLinkingObjects来检查Blog特定对象Comment属于哪个对象。

@interface Comment : RLMObject
@property (readonly) RLMLinkingObjects *blog;
@property NSString *message;
@end

@implementation Comment
+ (NSDictionary *)linkingObjectsProperties {
    return @{
        @"blog": [RLMPropertyDescriptor descriptorWithClass:Blog.class propertyName:@"comments"],
    };
}
@end
RLM_ARRAY_TYPE(Comment)

@interface Blog : RLMObject
@property RLMArray<Comment *><Comment> *comments;
@end

@implementation Blog
@end

RLMArray行为就像RLMResults; 它延迟加载数据并且是对底层内容的实时引用。因此,您可以在这种情况下轻松依赖RLMArray而无需担心。:)

虽然没有任何官方解决方案,但有很多第三方库可以帮助将 JSON 数据从 REST API 映射到 Realm(例如https://github.com/matthewcheok/Realm-JSON),因此它可能值得检查他们出去。无论哪种方式,只要本地和远程的架构相对相似,您应该可以轻松映射它。

我希望这有帮助!

于 2016-05-13T05:08:56.900 回答