ios-Realm數據庫的使用


【集成 Realm】

  本 Demo 使用 OC 創建,所以先進入 Realm 官網 (我記得之前都是有官方中文教程的,但現在最新版沒有中文了),到 Objective-C -> Getting started. 選擇靜態庫,按如下提示做好。

  

  上面做法是 1.下載 Realm 包   2. 將 ios/static 文件的 Realm.framework 拖入工程。 3. Build Phases 下添加 libc++.tbd 和 libz.tbd。4. swift工程才需要做這點,但這里是OC,所以不用做。

  下載 Realm Studio,它是一個很方便用來查看數據的工具,在開發中調試十分方便。如下是使用 Realm Studio 實時查看 ios 沙盒中 Realm 數據庫數據的實時數據情況。

  

【實現的效果】

  

  實際就是記錄用戶選擇的城市,然后更新用戶選擇過的數據,並且最新選擇的城市排在前面,只需要顯示歷史數據4條。

【開始 Realm 部分代碼】

  我們的 model 要先繼承自 RLMObject。

  Realm 的操作很簡單,根據MVVM結構,它的這部分代碼可以寫到 ViewModel 中,在用戶點下面城市數據時向 Realm 中新增對象就可以,然后如果存儲的數據大於4條則刪除多余數據。

// 插入一條數據
- (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地址】

   碼雲: https://gitee.com/LiJinShi/DB_demo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM