iOS開發(fā)之Realm數據庫的簡單使用

1.安裝

Realm github下載地址

如果使用cocoapods,示例語句如下
platform :ios, '8.0'
target 'Simona_Realm' do
pod 'Realm', '~> 3.0.0-beta.3'
end

2.創(chuàng)建簡易模型,繼承于RLMObject,存儲在數據庫的模型都需要繼承于RLMObject
Person.h
#import <Realm/Realm.h>
RLM_ARRAY_TYPE(Person);
@interface Person : RLMObject

@property NSString *personId;
@property BOOL status;
@property NSString *sex;

@end
Person.m
#import "Person.h"

@implementation Person

// 設置主鍵,確保數據唯一性
+ (NSString *)primaryKey {
    return @"personId";
}

// 設置屬性不為nil
+ (NSArray<NSString *> *)requiredProperties {
    return @[@"sex"];
}

// 設置忽略屬性
+ (NSArray<NSString *> *)ignoredProperties {
    return @[];
}

// 設置默認值,對于不為null的屬性,默認給空
+ (NSDictionary *)defaultPropertyValues {
    return @{@"sex":@""};
}

//索引屬性,主要用于搜索,根據性別進行搜索
+ (NSArray<NSString *> *)indexedProperties {
    return @[@"sex",@"woman"];
}

@end

關于RLMObject
1.Realm忽略了OC的屬性特性(如nonatomic, atomic, strong,retain, weak,copy等),所以在聲明屬性時可不寫,,這些特性會一直生效直到被寫入數據庫。
2.Realm支持以下的類型BOOL, NSInteger, long, double, CGFloat, NSString, NSDate, NSData
3.定義了RLM_ARRAY_TYPE(Person)表示支持RLMArray屬性,相當于允許RLMArray<Person>屬性的使用,例如:在其他屬性里可@property RLMArray<Person *><Person> *personal如此使用,相當于繼承關系(本文暫不做贅述)

3.使用
<1.>存儲
模擬存儲一萬條假數據 
RLMRealm *realm = [RLMRealm defaultRealm];
       [realm transactionWithBlock:^{
           for (int i = 0; i < 10000; i++) {
               Person *person = [[Person alloc]init];
               person.personId = [NSString stringWithFormat:@"張%d",i];
               person.sex = @"Not scanned";
               person.status = YES;
               [realm addObject:person];
           }
    }];

這里的
[realm transactionWithBlock:^{ }];
等同于
[realm beginWriteTransaction];
[realm commitWriteTransaction];
每次打開關閉數據庫時都應執(zhí)行此操作

<2.>刪除
 RLMRealm *realm = [RLMRealm defaultRealm];
    [realm beginWriteTransaction];
    [realm deleteAllObjects];
    [realm commitWriteTransaction];
<3.>查詢
1.根據謂詞查詢
// RLMResults相當于查詢到的數組
NSPredicate *pred = [NSPredicate predicateWithFormat:@"status = %ld", NO];
RLMResults *result = [Person objectsWithPredicate:pred];
Person *per = result[indexPath.row];

2.根據條件查詢
RLMResults *result = [Person objectsWhere:@"status = 'NO' AND personId BEGINSWITH '張1'"];
Person *per = result[indexPath.row];

3.查詢所有
RLMResults *persons = [Person allObjects];
Person *per = persons[indexPath.row];
<4.>更新
1.更新數據里某一屬性值
NSPredicate *pred = [NSPredicate predicateWithFormat:@"personId = %@", strScan];
RLMResults *result = [Person objectsWithPredicate:pred];
    if (result.count != 0) {

        RLMRealm *r = [RLMRealm defaultRealm];
        [r beginWriteTransaction];
        //直接修改
        Person *person = result[0];
        person.sex = @"Has been scanned";
        person.status = NO;
        [r commitWriteTransaction];
}

2.創(chuàng)建一個新值并更新數據庫,createOrUpdateInRealm:通過主鍵來更新插入

 NSPredicate *pred = [NSPredicate predicateWithFormat:@"personId = %@", strScan];
    RLMResults *result = [Person objectsWithPredicate:pred];
    if (result.count != 0) {
        
        Person *person = [[Person alloc]init];
        person.personId = @"Simona1";
        person.sex = @"woman";
        person.status = NO;
        RLMRealm *r = [RLMRealm defaultRealm];
        [r beginWriteTransaction];
        [Person createOrUpdateInRealm:r withValue:person];
        [r commitWriteTransaction];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容