移動(dòng)端iOS系統(tǒng)數(shù)據(jù)庫之Realm(一)數(shù)據(jù)庫創(chuàng)建

1194012-fdee34cd97308fac.png

中文版-通俗版-項(xiàng)目實(shí)踐版 realm數(shù)據(jù)使用實(shí)踐

本文總結(jié)realm數(shù)據(jù)庫在iOS開發(fā)中遇到的問題以及解決辦法,如果您也有遇到更多realm相關(guān)的問題請聯(lián)系我andybbear@163.com

1风题、realm的使用介紹中文版:https://realm.io/cn/docs/objc/latest/

2客叉、realm的優(yōu)點(diǎn)介紹
【轉(zhuǎn)】
<code>
跨平臺:現(xiàn)在很多應(yīng)用都是要兼顧iOS和Android兩個(gè)平臺同時(shí)開發(fā)。如果兩個(gè)平臺都能使用相同的數(shù)據(jù)庫辽剧,那就不用考慮內(nèi)部數(shù)據(jù)的架構(gòu)不同蹂安,使用Realm提供的API,可以使數(shù)據(jù)持久化層在兩個(gè)平臺上無差異化的轉(zhuǎn)換晴裹。
簡單易用:Core Data 和 SQLite 冗余、繁雜的知識和代碼足以嚇退絕大多數(shù)剛?cè)腴T的開發(fā)者救赐,而換用 Realm涧团,則可以極大地減少學(xué)習(xí)成本,立即學(xué)會本地化存儲的方法经磅。毫不吹噓的說泌绣,把官方最新文檔完整看一遍,就完全可以上手開發(fā)了预厌。
可視化:Realm 還提供了一個(gè)輕量級的數(shù)據(jù)庫查看工具阿迈,在Mac Appstore 可以下載“Realm Browser”這個(gè)工具,開發(fā)者可以查看數(shù)據(jù)庫當(dāng)中的內(nèi)容轧叽,執(zhí)行簡單的插入和刪除數(shù)據(jù)的操作苗沧。畢竟,很多時(shí)候炭晒,開發(fā)者使用數(shù)據(jù)庫的理由是因?yàn)橐峁┮恍┧^的“知識庫”待逞。</code>
【自我簡單總結(jié)】
<code>realm使用簡單,和sqlite相比不用使用sql語句网严,一個(gè)model就是一個(gè)張表识樱,節(jié)省了很大的時(shí)間;但是model需要繼承RLMObject對象。和CoreData相比的化簡化了學(xué)習(xí)成本牺荠,畢竟我從來不用CoreData翁巍。從項(xiàng)目使用的角度來說,realm比較好上手休雌,掌握基本的幾個(gè)方法就能使用灶壶,支持事務(wù),數(shù)據(jù)變化監(jiān)聽杈曲,數(shù)據(jù)遷移驰凛,跨平臺,對于對數(shù)據(jù)庫要求不高担扑,簡單來數(shù)據(jù)庫做緩存的同學(xué)來說恰响,使用簡單。另一方面涌献,realm使用也有一些坑胚宦,例如版本覆蓋安裝,需要進(jìn)行版本遷移燕垃。pod realm 安裝下載比較慢枢劝,這一點(diǎn)可以做成靜態(tài)庫放在自己的git上解決。
</code>
3卜壕、下面廢話少說進(jìn)入正題您旁,show your code 。

使用pod安裝

Podfile寫法轴捎,指定使用最新版2.8.3
<code>
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '7.0'
target :RealmDemo do
pod 'Realm', '2.8.3'
end
</code>

一鹤盒、創(chuàng)建數(shù)據(jù)庫

//1、使用默認(rèn)的realm侦副,會在Documents/下生成一個(gè)default.realm文件
<pre><code>
RLMRealm *defaultRealm = [RLMRealm defaultRealm];</pre></code>
//2侦锯、自定義路徑
<pre>
NSString *rlmPath =[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingString:@"/custom.realm"];
RLMRealm *customRealm = [RLMRealm realmWithURL:[NSURL URLWithString:rlmPath]];
</pre>
//3、通過配置生成realm
<pre>
RLMRealm *configRealm = [RLMRealm realmWithConfiguration:self.config error:nil];
</pre>
4跃洛、獲取config的方法
<pre>

  • (RLMRealmConfiguration *)config {
    static RLMRealmConfiguration *_config = nil;
    if (!_config) {
    RLMRealmConfiguration *config = [[RLMRealmConfiguration alloc] init];
    //配置數(shù)據(jù)遷移的時(shí)候率触,如果有錯(cuò)誤導(dǎo)致崩潰問題终议,會刪除數(shù)據(jù)庫重建汇竭,不會崩潰,但是數(shù)據(jù)會丟失穴张。配置NO數(shù)據(jù)不會丟失细燎,但是應(yīng)用會崩潰
    config.deleteRealmIfMigrationNeeded = YES;
    NSString *configPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingString:@"/config.realm"];
    config.fileURL = [NSURL URLWithString:configPath];
    //設(shè)置realm管理的RLMObjects,管理了那么些表,多個(gè)數(shù)據(jù)庫表可以分開管理
    config.objectClasses = @[NSClassFromString(@"Person"),NSClassFromString(@"Dog")];

_config = config;
}
return _config;
}
</pre>

二皂甘、數(shù)據(jù)遷移

<pre>
//在APP didFinishLaunching調(diào)用
+(void)dataBaseMigration {
//如果使用的defualt realm獲取默認(rèn)的config進(jìn)行遷移
RLMRealmConfiguration *defaultConfig = [RLMRealmConfiguration defaultConfiguration];
//配置數(shù)據(jù)版本玻驻,每次項(xiàng)目發(fā)布加1
defaultConfig.schemaVersion = 2;
defaultConfig.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
if (oldSchemaVersion < 2) {
//歷史版本進(jìn)行遷移
// [migration enumerateObjects:@"xxx" block:^(RLMObject * _Nullable oldObject, RLMObject * _Nullable newObject) {
//
// }];
}
};
//使用自定義配置的config realm進(jìn)行遷移
RLMRealmConfiguration *config = self.config;
//配置數(shù)據(jù)版本,每次項(xiàng)目發(fā)布加1
config.schemaVersion = 2;
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
if (oldSchemaVersion < 2) {
//歷史版本進(jìn)行遷移
// [migration enumerateObjects:@"xxx" block:^(RLMObject * _Nullable oldObject, RLMObject * _Nullable newObject) {
//
// }];
}
};

}

</pre>

三、在Documents下可以找到數(shù)據(jù)庫璧瞬,

image.png

可以用可視化工具打開(在Mac Appstore 可以下載“Realm Browser”這個(gè)工具)

1.jpeg

下一篇將介紹表的創(chuàng)建和數(shù)據(jù)的增刪改查
代碼在這里:https://github.com/icoder20150719/Realm-

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末户辫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗤锉,更是在濱河造成了極大的恐慌渔欢,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘟忱,死亡現(xiàn)場離奇詭異奥额,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)访诱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門垫挨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人触菜,你說我怎么就攤上這事九榔。” “怎么了涡相?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵帚屉,是天一觀的道長。 經(jīng)常有香客問我漾峡,道長攻旦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任生逸,我火速辦了婚禮牢屋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘槽袄。我一直安慰自己烙无,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布遍尺。 她就那樣靜靜地躺著截酷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乾戏。 梳的紋絲不亂的頭發(fā)上迂苛,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機(jī)與錄音鼓择,去河邊找鬼三幻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呐能,可吹牛的內(nèi)容都是我干的念搬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朗徊!你這毒婦竟也來了首妖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤爷恳,失蹤者是張志新(化名)和其女友劉穎悯搔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舌仍,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妒貌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铸豁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灌曙。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖节芥,靈堂內(nèi)的尸體忽然破棺而出在刺,到底是詐尸還是另有隱情,我是刑警寧澤头镊,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布蚣驼,位于F島的核電站,受9級特大地震影響相艇,放射性物質(zhì)發(fā)生泄漏颖杏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一坛芽、第九天 我趴在偏房一處隱蔽的房頂上張望留储。 院中可真熱鬧,春花似錦咙轩、人聲如沸获讳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丐膝。三九已至,卻和暖如春钾菊,著一層夾襖步出監(jiān)牢的瞬間帅矗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工结缚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留损晤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓红竭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子茵宪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

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