我研究过Realm的文档,并了解可用于管理对象组的各种类。据我所知,有RLMArrays,RLMLinkingObjects和RLMResults。我将使用具有许多类注释对象的Blog类的示例来设置我的问题。假设Blog类可以有10000个对象,并且每个Blog对象可以有1000个注释,那么我不清楚如何最好地表达Realm中的关系。我可以使用RLMArray的评论作为博客的属性。然后我将不得不管理博客和评论的反向链接。这导致我转向RLMLinkingObjects,因为我可以将博客上的comments属性表示为链接回博客的任何评论。然后有一个复杂的问题是,我想要一次实例化的博客和评论要多得多。这是RLMResults选项很有吸引力的地方,因为它允许对象懒惰地实例化。但是,这改变了我与对象交互的性质,因为我现在正在查询与博客相关的评论,而不是简单地访问该属性(例如blog.comments)。
我在这里遗漏了一个重要的考虑因素,即这些数据都存在于服务器上,但我希望首先在本地定义对象模型(使用持久性),然后弄清楚如何映射REST上的模型到服务器。
我喜欢Realm用户的任何意见,想法或建议。
谢谢!
答案 0 :(得分: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
而无需担心。 :)
虽然没有任何官方解决方案,但是有很多第三方库可以帮助将REST API中的JSON数据映射到Realm(例如https://github.com/matthewcheok/Realm-JSON),因此可能值得检查它们。无论哪种方式,只要本地和远程架构相对类似,您应该能够毫不费力地映射它。
我希望有所帮助!