Использование Couchbase Lite для сохранения древовидной структуры данных в приложении Mac

Я использую Couchbase Lite в своем приложении для Mac. У меня есть список источников, который отображает категории в древовидной структуре данных. Каждая категория — это объект с заголовком и дочерним свойством, представляющим собой изменяемый массив.

Заголовок модели выглядит примерно так:

#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, как они это сделают.


person imns    schedule 28.05.2014    source источник
comment
если вы не хотите копировать данные на сервер, почему бы не использовать основные данные?   -  person thorb65    schedule 28.05.2014
comment
Я хочу реплицировать данные и реализовать синхронизацию между приложениями. Хороший вопрос, я должен был упомянуть об этом в своем посте.   -  person imns    schedule 28.05.2014


Ответы (1)


Вы можете хранить каждую модель отдельно в документе CBL. Вам нужно только сохранить ссылку на корневую модель или сохранить ее documentId.

Вы также можете хранить полное дерево внутри одного документа, используя вложенные модели. Вам нужно будет изменить свою декларацию на:

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

Чтобы увидеть примеры использования CBLJSONEncoding, вы можете скачать исходники CBL. Однако в последнем случае любое изменение одной из вложенных моделей приведет к перезаписи всего дерева моделей. Наоборот, если вы изменяете дерево одновременно с нескольких устройств, будет легче обеспечить согласованность, так как это один документ. CBLJSONEncoding сложнее, но очень полезен в базах данных NoSql.

person Laurent    schedule 29.05.2014