• Realm学习总结


    参考博客:

    http://www.jianshu.com/p/096bec929f2a

    http://www.cnblogs.com/ilyy/p/5648051.html

    参考的博客介绍很详细,我就不写了..写了一个简单的学习的demo.

    GitHub地址: https://github.com/PengSiSi/RealmDemo


    代码如下:

    //
    //  ViewController.m
    //  RealmDemo
    //
    //  Created by 思 彭 on 2017/7/20.
    //  Copyright © 2017年 思 彭. All rights reserved.
    
    // 注意区别默认的和自己自定义realm的
    
    #import "ViewController.h"
    #import "PersonModel.h"
    #import <Realm.h>
    #import <RLMRealm.h>
    
    @interface ViewController () {
        
        RLMRealm *_customRealm;
    }
    
    @property (weak, nonatomic) IBOutlet UITextField *nameTextField;
    @property (weak, nonatomic) IBOutlet UITextField *sexTextField;
    @property (weak, nonatomic) IBOutlet UITextField *ageTextField;
    
    @property (nonatomic, strong) RLMResults *locArray;
    @property (nonatomic, strong) RLMNotificationToken *token;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    //    可以使用默认的
    //    _customRealm = [RLMRealm defaultRealm];
        
        //自己创建一个新的RLMRealm
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *pathStr = paths.firstObject;
        // pathStr = /Users/sipeng/Library/Developer/CoreSimulator/Devices/59E51096-9523-4845-84E8-2BB5360FB50E/data/Containers/Data/Application/A20B045E-6C86-4872-99DF-A52541FB1104/Documents
    
        NSLog(@"pathStr = %@",pathStr);
        _customRealm = [RLMRealm realmWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",pathStr,@"person.realm"]]];
    }
    
    /**
     增
    
     @param sender <#sender description#>
     */
    - (IBAction)addAction:(id)sender {
        
        // 获取默认的 Realm 实例
    //    RLMRealm *realm = [RLMRealm defaultRealm];
        
        PersonModel *person = [[PersonModel alloc]init];
        person.name = self.nameTextField.text;
        person.sex = self.sexTextField.text;
        person.age = [self.ageTextField.text integerValue];
        NSLog(@"name - %@ sex = %@ age = %ld",person.name, person.sex, person.age);
        // 数据持久化
        [_customRealm transactionWithBlock:^{
            [_customRealm addObject:person];
        }];
        // 通过事务将数据添加到 Realm 中
    //    [_customRealm beginWriteTransaction];
    //    [_customRealm addObject:person];
    //    [_customRealm commitWriteTransaction];
        NSLog(@"增加成功啦");
        [self findAction:nil];
    }
    
    /**
     删
    
     @param sender <#sender description#>
     */
    - (IBAction)deleteAction:(id)sender {
        
        // 获取默认的 Realm 实例
    //    RLMRealm *realm = [RLMRealm defaultRealm];
        [_customRealm beginWriteTransaction];
        [_customRealm deleteAllObjects];
        [_customRealm commitWriteTransaction];
        [self findAction:nil];
    }
    
    /**
     改
    
     @param sender <#sender description#>
     */
    - (IBAction)updateAction:(id)sender {
        
        for (PersonModel *person in self.locArray) {
            NSLog(@"name - %@ sex = %@ age = %ld",person.name, person.sex, person.age);
        }
        
        // 获取默认的 Realm 实例
    //    RLMRealm *realm = [RLMRealm defaultRealm];
        PersonModel *model = self.locArray[0];
        [_customRealm beginWriteTransaction];
        model.name = @"思思棒棒哒";
        [_customRealm commitWriteTransaction];
        
        NSLog(@"修改成功");
        for (PersonModel *person in self.locArray) {
            NSLog(@"name - %@ sex = %@ age = %ld",person.name, person.sex, person.age);
        }
    }
    
    /**
     查
    
     @param sender <#sender description#>
     */
    - (IBAction)findAction:(id)sender {
        
        //自己创建一个新的RLMRealm
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *pathStr = paths.firstObject;
        NSLog(@"pathStr = %@",pathStr);
    
        // 查询指定的 Realm 数据库
        RLMRealm *personRealm = [RLMRealm realmWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",pathStr,@"person.realm"]]];
        // 获得一个指定的 Realm 数据库
        self.locArray = [PersonModel allObjectsInRealm:personRealm]; // 从该 Realm 数据库中,检索所有model
        
        // 这是默认查询默认的realm
    //    self.locArray = [PersonModel allObjects];
        NSLog(@"self.locArray.count = %ld",self.locArray.count);
    }
    
    // 创建数据库
    - (void)creatDataBaseWithName:(NSString *)databaseName{
        
        NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *path = [docPath objectAtIndex:0];
        NSString *filePath = [path stringByAppendingPathComponent:databaseName];
        NSLog(@"数据库目录 = %@",filePath);
        
        RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
        config.fileURL = [NSURL URLWithString:filePath];
    //    config.objectClasses = @[MyClass.class, MyOtherClass.class];
        config.readOnly = NO;
        int currentVersion = 1.0;
        config.schemaVersion = currentVersion;
        
        config.migrationBlock = ^(RLMMigration *migration , uint64_t oldSchemaVersion) {       // 这里是设置数据迁移的block
            if (oldSchemaVersion < currentVersion) {
            }
        };
        
        [RLMRealmConfiguration setDefaultConfiguration:config];
    }
    
    @end
  • 相关阅读:
    函数及其表示
    集合等离散数学内容
    求和
    分式·新方法
    弹力、重力、摩擦力
    洛谷 P1357 花园
    浮力
    因式分解·新方法
    压强
    洛谷 P2051 [AHOI2009]中国象棋
  • 原文地址:https://www.cnblogs.com/pengsi/p/7210981.html
Copyright © 2020-2023  润新知