WCDB學(xué)習(xí)之嵌套模型存儲

最近項目需要神凑,在找好用的存儲框架象浑,然后就找到了WCDB (https://github.com/Tencent/wcdb)旭等。相比于其他的優(yōu)劣勢就不說了窖铡,網(wǎng)上分析的很多疗锐。下面進入正題嵌套模型如何存儲:
例如下面模型Message

@interface Message : NSObject

@property int localID;
@property(retain) NSString *content;
@property(retain) NSString *createTime;
@property(retain) NSString *modifiedTime;
@property (nonatomic, strong) User *user;

@end

Message里面有一個User模型,而我們?nèi)绻{(diào)用insertObject的時候费彼,會崩潰:

-[User encodeWithCoder:]: unrecognized selector sent to instance 0x283a941a0

然后查找文檔滑臊,


WCDB wiki教程

wiki文檔

答案很明顯,嵌套模型要實現(xiàn)WCTColumnCoding協(xié)議箍铲,才可以綁定简珠。
so,
第一步虹钮,創(chuàng)建WCTColumnCoding文件模板


創(chuàng)建文件

我綁定的type in dataBase是String類型聋庵,因為中間使用了第三方插件YYModel,模型轉(zhuǎn)json字符串最簡單方便芙粱,各位有其他更好的方法也可以分享出來學(xué)習(xí)祭玉。
創(chuàng)建之后是這樣的

#import <Foundation/Foundation.h>
#import <WCDB/WCDB.h>

@interface User (WCTColumnCoding) <WCTColumnCoding>
@end

@implementation User (WCTColumnCoding)

+ (instancetype)unarchiveWithWCTValue:(NSString *)value
{
    return /* <#Unarchive User From NSString *#> */;
}

- (NSString *)archivedWCTValue
{
    return /* <#Archive NSString * To User#> */;
}

+ (WCTColumnType)columnTypeForWCDB
{
    return WCTColumnTypeString;
}

@end

那就實現(xiàn)上面的協(xié)議方法就行了
存的時候會調(diào)用archivedWCTValue,所以在這個時候?qū)⒛P娃D(zhuǎn)化成字符串存進去

- (NSString *)archivedWCTValue
{
    NSString *str = [self yy_modelToJSONString];
    return [NSString stringWithString:str];
}

而取的時候調(diào)用的是+ (instancetype)unarchiveWithWCTValue:(NSString *)value方法春畔,所以在這個時候?qū)son字符串轉(zhuǎn)成model:

+ (instancetype)unarchiveWithWCTValue:(NSString *)value
{
    if (value) {
        User *user = [User yy_modelWithJSON:value];
        return user;
    }
    return nil;
}

好了脱货,到此大功告成,運行一下看看結(jié)果User有沒有存進去
創(chuàng)建模型:

    Message *message = [[Message alloc] init];
    message.isAutoIncrement = YES;
    message.content = @"hello";
    message.user = [User new];
    message.user.name = @"user name";
    [[WCDBManager shareInstance] insertObject:message into:@"WM"];

打印結(jié)果


結(jié)果

結(jié)束B梢獭U窬!
(寫的太匆忙择份,細(xì)節(jié)上的沒怎么寫扣孟,就寫了一下大概流程,有時間以后會補充)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荣赶,一起剝皮案震驚了整個濱河市凤价,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拔创,老刑警劉巖利诺,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剩燥,居然都是意外死亡慢逾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侣滩,“玉大人口注,你說我怎么就攤上這事∈ぢ保” “怎么了疆导?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵赁项,是天一觀的道長葛躏。 經(jīng)常有香客問我,道長悠菜,這世上最難降的妖魔是什么舰攒? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮悔醋,結(jié)果婚禮上摩窃,老公的妹妹穿的比我還像新娘。我一直安慰自己芬骄,他們只是感情好猾愿,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著账阻,像睡著了一般蒂秘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淘太,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天姻僧,我揣著相機與錄音,去河邊找鬼蒲牧。 笑死撇贺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冰抢。 我是一名探鬼主播松嘶,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挎扰!你這毒婦竟也來了喘蟆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鼓鲁,失蹤者是張志新(化名)和其女友劉穎蕴轨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骇吭,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡橙弱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棘脐。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡斜筐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛀缝,到底是詐尸還是另有隱情顷链,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布屈梁,位于F島的核電站嗤练,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏在讶。R本人自食惡果不足惜煞抬,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望构哺。 院中可真熱鬧革答,春花似錦、人聲如沸曙强。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碟嘴。三九已至溪食,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間臀防,已是汗流浹背眠菇。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留袱衷,地道東北人捎废。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像致燥,于是被迫代替她去往敵國和親登疗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容