【集成 Realm】ios
本 Demo 使用 OC 建立,因此先進入 Realm 官網 (我記得以前都是有官方中文教程的,但如今最新版沒有中文了),到 Objective-C -> Getting started. 選擇靜態庫,按以下提示作好。c++
上面作法是 1.下載 Realm 包 2. 將 ios/static 文件的 Realm.framework 拖入工程。 3. Build Phases 下添加 libc++.tbd 和 libz.tbd。4. swift工程才須要作這點,但這裏是OC,因此不用作。git
下載 Realm Studio,它是一個很方便用來查看數據的工具,在開發中調試十分方便。以下是使用 Realm Studio 實時查看 ios 沙盒中 Realm 數據庫數據的實時數據狀況。數據庫
【實現的效果】swift
實際就是記錄用戶選擇的城市,而後更新用戶選擇過的數據,而且最新選擇的城市排在前面,只須要顯示歷史數據4條。工具
【開始 Realm 部分代碼】ui
咱們的 model 要先繼承自 RLMObject。spa
Realm 的操做很簡單,根據MVVM結構,它的這部分代碼能夠寫到 ViewModel 中,在用戶點下面城市數據時向 Realm 中新增對象就能夠,而後若是存儲的數據大於4條則刪除多餘數據。3d
// 插入一條數據 - (void)insertData:(LCityModel *)cityM { cityM.updateDate = [NSDate new]; RLMRealm *realm = [RLMRealm defaultRealm]; [realm beginWriteTransaction]; [LCityModel createOrUpdateInRealm:realm withValue:cityM]; [realm commitWriteTransaction]; // 判斷若是大於4條就刪除掉多於4條的最先的 RLMResults<LCityModel *> *results = [[LCityModel allObjects] sortedResultsUsingKeyPath:@"updateDate" ascending:NO]; if (results.count > 4) { for (int i = 4; i < results.count; i ++ ) { LCityModel *resultM = [results objectAtIndex:i]; [realm transactionWithBlock:^{ [realm deleteObject:resultM]; }]; } } }
ViewModel 中還須要有查詢歷史數據方法,將查詢出的數據展現到歷史數據 view 上,以下:調試
// 查詢出4條最近的歷史記錄 - (NSMutableArray *)queryHistoryData { NSMutableArray *historyArray = [NSMutableArray array]; RLMResults *results = [[LCityModel allObjects] sortedResultsUsingKeyPath:@"updateDate" ascending:NO]; for (LCityModel *tempM in results) { [historyArray addObject:tempM]; } return historyArray; }
在進入這個控制器頁面時,也須要當即展現歷史數據,因此在 ViewDidLoad 中也調用一下 [self reloadHistoryData];
- (void)reloadHistoryData { NSMutableArray *historyArray = [self.homeViewModel queryHistoryData]; [self.LTestView.historyView reloadDataWithArray:historyArray]; }
【demo地址】