數(shù)據(jù)存儲Realm

準備工作

  • 1.安裝realm模版插件(使用模版創(chuàng)建對象模型):下載realm官網(wǎng)oc的demo(https://realm.io/docs/objc/latest/), 編譯plugin下的 RealmPlugin.xcodeproj項目伙窃,編譯成功 插件就安裝成功了菩颖,然后重啟就可以使用。
  • 2.安裝成功之后創(chuàng)建項目为障,并手動導入框架或者使用cocopod導入(在剛才官網(wǎng)中有手動導入的步驟);
  • 3.在蘋果商店下載一個Realm Browser 的軟件,查看realm數(shù)據(jù)庫文件;
  • 準備工作完成;

使用流程

  • 1.導入頭文件#import < Realm/Realm.h >.
  • 2.創(chuàng)建類,使用realm模版進行創(chuàng)建(模版插件安裝成功就會看到realm模版),繼承于RLMObject.如圖:

@interface BLEBook : RLMObject
@property NSString *name;
@property NSInteger price;
@end



//設(shè)置主鍵
@implementation BLEPerson

+ (NSString *)primaryKey {
 
    return @"id";
}

@end


  • 3.在類中生成數(shù)據(jù)模型.
  • 4.在需要的地方創(chuàng)建實例,使用Realm方法調(diào)用.

基本語法

插入

插入方式1:


   //這種插入:有相同的主鍵會崩潰
   //初始化book的三種方式
   方式1:
    BLEBook *book = [[BLEBook alloc]init];
    book.name = @"C++語言";
    book.price = 100;
    
   方式2:
    BLEBook *dicBook = [[BLEBook alloc]initWithValue:@{@"name":@"數(shù)據(jù)庫",@"price":@50}];
    
    方式3:
    BLEBook *arrBook = [[BLEBook alloc]initWithValue:@[@"C語言",@25]];
    
    //在處理事務(wù)的時候做添加book
    RLMRealm *realm = [RLMRealm defaultRealm];
    [realm beginWriteTransaction];
    [realm addObject:book];
    [realm addObject:dicBook];
    [realm addObject:arrBook];
    [realm commitWriteTransaction];
    
    

插入方式2:

    這種插入:如果有相同主鍵會做修改 負責就添加
    
    BLEPerson *author = [[BLEPerson alloc]init];
    author.id = 101;
    author.name = @"并er";
   
    [[RLMRealm defaultRealm]beginWriteTransaction];
    [BLEPerson createOrUpdateInRealm:[RLMRealm defaultRealm] withValue:author];
    [[RLMRealm defaultRealm]commitWriteTransaction];
    

刪除

[[RLMRealm defaultRealm]beginWriteTransaction];

RLMResults *result = [BLEBook allObjects];

[[RLMRealm defaultRealm]deleteObject:result.lastObject];

[[RLMRealm defaultRealm]commitWriteTransaction];

修改

[[RLMRealm defaultRealm]beginWriteTransaction];

RLMResults *result = [BLEBook allObjects];

BLEBook *firstBook = [result objectAtIndex:0];

firstBook.price = 400;

BLEBook *book = result.lastObject;

book.price = 100;

[[RLMRealm defaultRealm]commitWriteTransaction];

查詢

//1.使用斷言字段查詢
RLMResults *result = [BLEBook objectsWhere:@"name BEGINSWITH 'C'"];

NSLog(@"%@",result);

//2.使用謂詞字段查詢
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"price == '50'"];

RLMResults *result = [BLEBook objectsWithPredicate:predicate];

NSLog(@"%@",result);

排序

RLMResults *sortBook = [[BLEBook allObjects]sortedResultsUsingProperty:@"name" ascending:NO];

NSLog(@"%@",sortBook);

添加通知

Realm有一個注冊通知的方法:addNotificationBlock:
作用:監(jiān)聽數(shù)據(jù)庫數(shù)據(jù)的改變晦闰,如果監(jiān)聽到數(shù)據(jù)庫數(shù)據(jù)改變,就會執(zhí)行通知回調(diào)鳍怨。刷新界面更新界面數(shù)據(jù)呻右。
實例:
這是我在A控制器引用了數(shù)據(jù)庫數(shù)據(jù),嘗試使用注冊通知監(jiān)聽數(shù)據(jù)的改變鞋喇。

//必須強引用改通知(防止釋放)
@property (nonatomic, strong)RLMNotificationToken *token;
 self.token = [[CHRealm defaultRealm]addNotificationBlock:^(NSString * _Nonnull notification, RLMRealm * _Nonnull realm) {
        //監(jiān)聽到數(shù)據(jù)庫數(shù)據(jù)改變后声滥,就會執(zhí)行此回調(diào)方法
         [self.tableView reloadData];
 }];

注意:在控制器釋放的時候要釋放監(jiān)聽(通知的基本用法)
- (void)dealloc {
    [self.token stop];
}
此方法用起來簡直就是爽爆了,小伙伴們你怎么看 趕快試一下吧侦香。

數(shù)據(jù)遷移

我們都知道在開發(fā)過程中落塑,數(shù)據(jù)的模型有時會隨著開發(fā)的遞進,需要做適當?shù)奶砑踊騽h除部分屬性罐韩,這就需要用到數(shù)據(jù)的遷移了憾赁。因為當使用realm進行了數(shù)據(jù)存儲后,必須經(jīng)過數(shù)據(jù)的遷移才能修改對應(yīng)的數(shù)據(jù)庫散吵。實際上就是升級存儲在沙盒里的數(shù)據(jù)庫版本龙考。具體代碼實現(xiàn)(didFinishLaunchingWithOptions中實現(xiàn))

//數(shù)據(jù)遷移 
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
    // 設(shè)置新的架構(gòu)版本。這個版本號必須高于之前所用的版本號(如果您之前從未設(shè)置過架構(gòu)版本矾睦,那么這個版本號設(shè)置為 0)
    config.schemaVersion = 2;
    config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
        // 目前我們還未進行數(shù)據(jù)遷移晦款,因此 oldSchemaVersion == 0
        if (oldSchemaVersion < 1) {
            // 什么都不要做!Realm 會自行檢測新增和需要移除的屬性枚冗,然后自動更新硬盤上的數(shù)據(jù)庫架構(gòu)
            CHLog(@"數(shù)據(jù)遷移");
        }
    };
    [RLMRealmConfiguration setDefaultConfiguration:config];
    [RLMRealm defaultRealm];

//每次修改了數(shù)據(jù)的模型的時候 就需改一次schemaVersion屬性(版本號 注意:版本號不能低于上一次的版本)

realm存儲路徑修改

realm默認存儲在document文件中缓溅。
直接上代碼:

- (RLMRealm *)instanceRealm {
    //默認配置(此時存儲路徑指向document)
    RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
//修改路徑(刪除后兩個路徑path)
    config.fileURL = [[config.fileURL URLByDeletingLastPathComponent]URLByDeletingLastPathComponent];
//修改路徑 (添加路徑path指向library的caches)
    config.fileURL = [[[[config.fileURL URLByAppendingPathComponent:@"Library" isDirectory:YES] URLByAppendingPathComponent:@"Caches" isDirectory:YES] URLByAppendingPathComponent:@"chronos"] URLByAppendingPathExtension:@"realm"];
    NSError *error = nil;
//創(chuàng)建realm
    RLMRealm *realm = [RLMRealm realmWithConfiguration:config error:&error];
    if (error) {
        NSLog(@"%ld",error.code);
    }
    return realm;
}


運行結(jié)束查看項目的document文件路徑 使用realm brower查看.realm 文件 實例:

注意:

具體的可以在官網(wǎng)查看。
因此設(shè)置可空的數(shù)字屬性必須是RLMInt赁温、RLMFloat肛宋、RLMDouble或者RLMBool其中一個類型州藕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酝陈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毁涉,老刑警劉巖沉帮,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贫堰,居然都是意外死亡穆壕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門其屏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喇勋,“玉大人,你說我怎么就攤上這事毛甲】醭ィ” “怎么了届宠?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長熄云。 經(jīng)常有香客問我,道長妙真,這世上最難降的妖魔是什么缴允? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮珍德,結(jié)果婚禮上练般,老公的妹妹穿的比我還像新娘。我一直安慰自己锈候,他們只是感情好薄料,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晴及,像睡著了一般都办。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虑稼,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天琳钉,我揣著相機與錄音,去河邊找鬼蛛倦。 笑死歌懒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的溯壶。 我是一名探鬼主播及皂,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼甫男,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了验烧?” 一聲冷哼從身側(cè)響起板驳,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碍拆,沒想到半個月后若治,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡感混,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年端幼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弧满。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡婆跑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庭呜,到底是詐尸還是另有隱情滑进,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布疟赊,位于F島的核電站郊供,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏近哟。R本人自食惡果不足惜驮审,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吉执。 院中可真熱鬧疯淫,春花似錦、人聲如沸戳玫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咕宿。三九已至币绩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間府阀,已是汗流浹背缆镣。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留试浙,地道東北人董瞻。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像田巴,于是被迫代替她去往敵國和親钠糊。 傳聞我的和親對象是個殘疾皇子挟秤,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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