Realm Objective-C 數(shù)據(jù)庫操作

今天研究了一下Realm數(shù)據(jù)庫,覺得特別厲害哈。Realm支持iOS,OS X,Android,速度快,操作相對來說比較簡單。

最重要的是官網(wǎng)對于數(shù)據(jù)庫版本升級和遷移的問題(這個在以前使用FMDB感覺是非常復(fù)雜的問題),提供了簡單容易的辦法。

下面使用object-C語言來操作常見的增,刪,改,查操作。swift先暫時不寫了,swift還不穩(wěn)定,等2.0再說。

參考地址:

http://www.cocoachina.com/ios/20150505/11756.html?

https://realm.io/cn/?

https://realm.io/docs/objc/latest/api/?


1.Realm安裝(參考官網(wǎng),但是我有修改)


手動安裝 (Objective-C & Swift)

下載最新的Realm發(fā)行版本并在本地解壓縮.

從ios/或者osx/目錄里,把Realm.framework文件拖動到你的Xcode開發(fā)項目里的File Navigator 中。確保Copy items into destination group’s folder已經(jīng)被選中,按Finish。

在Xcode file explorer中選中你要的開發(fā)項目.選擇target,點擊Build Phases選項. 在Link Binary with Libraries里按+, 添加libc++.dylib.

如果使用Realm + Swift, 拖動Swift/RLMSupport.swift到你的Xcode project的File Navigator中。點選Copy items if needed

如果在OSX項目中使用Realm,點擊左上角的 + ,選擇New Copy Files Phase,將其重命名為Copy Frameworks, 將Destination設(shè)置為Frameworks,并且添加Realm.framework。

特別強調(diào),在iOS目錄里面,有2個文件夾,請?zhí)砑觭tatic文件夾的Realm.framework,我暫時不明白使用dynamic文件為什么會報錯。

PS:Realm瀏覽器在需要在github里面找,在tools文件夾里面,官網(wǎng)的壓縮包里面不存在這個。需要運行

Realm Browser項目,可以導(dǎo)出安裝包,成為獨立的安裝包。

?

Realm Browser界面

創(chuàng)建一個測試項目,即可開始操作數(shù)據(jù)庫。下面示例操作:


2.增加操作

@interface Person : RLMObject? //人員

@property NSInteger _ID;? ? ? ? //ID

@property NSString* name;? ? ? //姓名

@property NSInteger age;? ? ? ? //年齡

@property NSString* sex;? ? ? ? //性別

@end

創(chuàng)建一個人員類,繼承RLMObject(必須繼承)

//數(shù)據(jù)庫操作對象

RLMRealm *realm = [RLMRealm defaultRealm];

//打開數(shù)據(jù)庫事務(wù)

[realm transactionWithBlock:^(){

????????? Person* _temp = [[Person alloc] init];

????????? _temp._ID = ++_Count;??? //計算的當(dāng)前ID

????????? _temp.name = @"kevingao";

????????? _temp.age = 26;

????????? _temp.sex = @"male";

?????????? //添加到數(shù)據(jù)庫

?????????? [realm addObject:_temp];

?????????? //提交事務(wù)

?????????? [realm commitWriteTransaction];

}];

一個簡單的添加操作,其他事情不需要我們來管理,RLMRealm會幫助我們搞定。


3.查詢操作

下面我們查詢所有的數(shù)據(jù)。

//獲得當(dāng)前所有數(shù)據(jù)

RLMResults* tempArray = [Person allObjects];

for (Person* model in tempArray) {

????? //打印數(shù)據(jù)

?????? NSLog(@"ID : %ld, name : %@, age : %ld , sex : %@",model._ID,model.name,model.age,model.sex);

}

查詢操作可能是最復(fù)雜的操作,使用謂詞或者是objectWhere語句來設(shè)計查詢語句來查詢。


4.修改操作

//數(shù)據(jù)庫操作對象

RLMRealm *realm = [RLMRealm defaultRealm];

[realm transactionWithBlock:^(){

??????????? //獲得對象

?????????? RLMResults* result = [Person allObjects];

?????????? //獲得第一個對象

?????????? Person* temp = [result objectAtIndex:0];

?????????? //修改sex

??????????? temp.sex = @"ttt";

?????????? //提交事務(wù),即被修改

?????????? [realm commitWriteTransaction];

}];


5.刪除操作

//數(shù)據(jù)庫操作對象

RLMRealm *realm = [RLMRealm defaultRealm];

[realm transactionWithBlock:^(){

????????? //獲得對象

???????? RLMResults* result = [Person allObjects];

???????? //清空

???????? [realm deleteObject:result.firstObject];

}];


以上就簡單的說了一下操作。

大家可以嘗試下哈,水平有限,當(dāng)改天再重新擴展一下內(nèi)容。

PS:思考了一個小問題,如果使用MJExtension框架,因為需要繼承,會和RLMObject發(fā)生沖突,所以Model需要做一個橋接轉(zhuǎn)換。就這樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容