使用Couchbase Lite在Mac App中保存树数据结构

时间:2014-05-28 18:41:13

标签: ios cocoa couchbase data-persistence couchbase-lite

我在Mac应用中使用couchbase lite。我有一个源列表,显示树数据结构中的类别。每个类别都是一个具有标题和子属性的对象,它是一个可变数组。

模型标题看起来像这样:

#import <CouchbaseLite/CouchbaseLite.h>

@interface SBCategory : CBLModel <NSPasteboardWriting, NSPasteboardReading>

@property(copy) NSString* uuid;
@property(copy) NSString* title;
@property(copy) NSDate* created_at;
@property(assign) BOOL isHeader;
@property (readonly, copy) NSMutableArray* children;

@end

我没有使用nstreecontroller,只是上面提到的对象数组。对于如何将其存储在数据库中,我真的很震惊。我应该单独存储每个对象吗?我应该尝试将整个结构序列化为json并存储它吗?我应该使用树控制器吗?如果提供帮助方法来保存数据?对此的建议非常感谢。我真的很想听到SOF的一些专家如何做到这一点。

1 个答案:

答案 0 :(得分:0)

您可以将每个模型单独存储在CBL文档中。您只需要保留对根模型的引用或保留其documentId。

您还可以使用嵌套模型将完整树存储在单个文档中。您必须将声明更改为:

@interface SBCategory : NSObject <CBLJSONEncoding, NSPasteboardWriting, NSPasteboardReading>

要查看有关使用CBLJSONEncoding的示例,您可以下载CBL源。 但是,在最后一种情况下,对其中一个嵌套模型的任何更改都将导致重写完整的模型树。相反,如果您同时从多个设备修改树,那么由于只有一个文档,这将更容易确保一致性。 CBLJSONEncoding在NoSql数据库中比较棘手但非常有用。