realm官網: https://realm.io/cn/docs/objc/latest/
1.將Realm庫pod到工程中
pod 'Realm'
2.建立數據模型
#import <Realm/Realm.h>
@interface Student : RLMObject
@property NSString *name;
@property NSInteger age;
/**
獲取數據模型
*/
+(Student *)StudentWithName:(NSString *)name;
/**
刪除數據
*/
+(void)deleteStudentWithName:(NSString *)name;
/**
更新數據
*/
- (void)updateAge:(NSInteger)age;
@end
#import "Student.h"
@implementation Student
/**
設置主鍵
*/
+(NSString *)primaryKey{
//主鍵
return @"name";
}
/**
獲取數據模型
*/
+(Student *)StudentWithName:(NSString *)name
{
RLMRealm *realm = [RLMRealm defaultRealm];
Student *student = [Student objectForPrimaryKey:name];
if (student == nil) {
student = [[Student alloc] init];
student.name = name;
[realm beginWriteTransaction];
[realm addObject:student];
[realm commitWriteTransaction];
}
return student;
}
/**
更新數據
*/
- (void)updateAge:(NSInteger)age{
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
self.age = age;
[realm commitWriteTransaction];
}
/**
刪除數據
*/
+ (void)deleteStudentWithName:(NSString *)name{
RLMRealm *realm = [RLMRealm defaultRealm];
Student *student = [Student objectForPrimaryKey:name];
[realm beginWriteTransaction];
[realm deleteObject:student];
[realm commitWriteTransaction];
}
@end
3.增、刪、改、查 操作
/**
獲取數據模型【增】
*/
+(Student *)StudentWithName:(NSString *)name
{
RLMRealm *realm = [RLMRealm defaultRealm];
Student *student = [Student objectForPrimaryKey:name];
if (student == nil) {
student = [[Student alloc] init];
student.name = name;
//增加模型
[realm beginWriteTransaction];
[realm addObject:student];
[realm commitWriteTransaction];
}
return student;
}
/**
刪除數據【刪】
*/
+ (void)deleteStudentWithName:(NSString *)name{
RLMRealm *realm = [RLMRealm defaultRealm];
Student *student = [Student objectForPrimaryKey:name];
[realm beginWriteTransaction];
//刪除模型
[realm deleteObject:student];
[realm commitWriteTransaction];
}
/**
更新數據【改】
*/
- (void)updateAge:(NSInteger)age{
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
//更改數據
self.age = age;
[realm commitWriteTransaction];
}
/**
查詢數據【查】
*/
_allStudent = [Student allObjects];
4.數據庫升級
所謂數據庫升級,比如,rev1.0版本發布了,其數據中原始數據模型為只有 name 和 age 兩個屬性。rev2.0需要給模型添加 score 和 class 兩個屬性,這時候,如果直接給模型添加屬性,不做數據庫升級操作,則需要將APP卸載,重新安裝才能使用,不然就是直接crash。
添加一個數據模型也是一樣的,比如直接新建一個 Math 模型,其有teacher 和 class屬性。直接新建添加,不做數據庫升級,也是直接crash。
當涉及到更改數據庫模型時就需要對數據庫進行升級操作了,realm數據庫升級操作很簡單。在AppDelegate中調用即可。
- (void)migrationRealm{
// 在 [AppDelegate didFinishLaunchingWithOptions:] 中進行配置
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
// 設置新的架構版本。這個版本號必須高于之前所用的版本號(如果您之前從未設置過架構版本,那么這個版本號設置為 0)
config.schemaVersion = 2;
// 設置閉包,這個閉包將會在打開低于上面所設置版本號的 Realm 數據庫的時候被自動調用
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
// 什么都不要做!Realm 會自行檢測新增和需要移除的屬性,然后自動更新硬盤上的數據庫架構
if (oldSchemaVersion < 1) {
}
};
// 告訴 Realm 為默認的 Realm 數據庫使用這個新的配置對象
[RLMRealmConfiguration setDefaultConfiguration:config];
// 現在我們已經告訴了 Realm 如何處理架構的變化,打開文件之后將會自動執行遷移
[RLMRealm defaultRealm];
}
然后調用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//數據庫升級
[self migrationRealm];
return YES;
}