美文网首页
iOS - objective-c中realm的简单实用

iOS - objective-c中realm的简单实用

作者: 翀鹰精灵 | 来源:发表于2021-01-24 18:48 被阅读0次
    在swift项目的开发中,realm是炙手可热的移动端数据库,我们一起来简单了解下realm
    目前realm支持Java、Swift、Objective-C、Java-Script、.Net共计5中语言,公司项目目前是OC开发,本次我们选择Objective-C版来学习下realm的用法。
    准备工作

    1.创建一个oc的项目通过cocoapods管理方式引入realm ( pod 'Realm', '~> 10.5.0').
    2.打开项目,演示realm简单的增、删、改、查用法。

    步骤流程

    1.创建一个Realm的模型

    * .h文件
    #import <Realm/Realm.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface StudentModel : RLMObject
    @property NSString *studentID;
    @property NSString *name;
    @property int   age;
    @end
    
    NS_ASSUME_NONNULL_END
    
    *.m 文件
    @implementation StudentModel
    + (NSString *)primaryKey {
        return @"studentID";
    }
    @end
    
    

    注意:对象必须继承 RLMObject

    • 我们参照realm官网中realm-objective-c 即刻开始的步骤来学习下数据库的增、删、改、查 简单用法
    一、增

    文档示意:

    01.png

    演示代码:

       //当然在打开Realm 数据库之前,可以对其进行配置,如下代码所示,这里暂时用defaultRealm
       /**
        RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
        //使用默认的目录,但是使用用户名来替换默认的文件名
        config.fileURL = [[[config.fileURL URLByDeletingLastPathComponent]URLByAppendingPathComponent:@"Allison"]URLByAppendingPathExtension:@"realm"];
        //将这个配置应用到默认的realm数据库中
        [RLMRealmConfiguration setDefaultConfiguration:config];
        */
       RLMRealm *realm = [RLMRealm defaultRealm];
        StudentModel *model = [[StudentModel alloc]initWithValue:@{@"studentID":@"001",@"na>me":@"张三",@"age":@18}];
        //1.添加模型
        [realm transactionWithBlock:^{
             [realm addObject:model];
        }];
    
        NSLog(@"数据库路径:%@",[[RLMRealmConfiguration defaultConfiguration]fileURL]);
    
    

    效果如下:

    02.png

    注意:后面需要演示到查询和删除,所以这里多添加几条李四,王五,赵六,孙七、周八、吴九、郑十的信息

    如下图所示:

    03.png
    二、查

    ( 把查询提到删除前面来,因为想删除一条数据,必须先要查询出来,才可以删除或者更改 )

    文档示意:

    04.png

    演示代码

    //2.查询数据
       //2.1 所有的查询(包含查询和属性访问)在realm中都是延时加载,只有当属性被访问时,才能够读取响应的数据
       RLMResults *results = [StudentModel allObjects];
       NSLog(@"===查询结果:%@",results);
        //2.2带条件查询
       RLMResults *results2 = [StudentModel objectsWhere:@"name = '张三'"];
       NSLog(@"带条件查询结果:%@",results2);
         //2.3排序/降序查询
       RLMResults *result3 = [StudentModel allObjects];
       RLMResults *sortResult = [result3 >sortedResultsUsingKeyPath:@"age" ascending:YES];
       NSLog(@"排序/降序查询:%@",sortResult);
        //2.4嵌套条件查询 如:年龄20岁的张三
       RLMResults *nameResult = [StudentModel objectsWhere:@"name = '张三'"];
       RLMResults *ageResult = [nameResult objectsWhere:@"age = 20"];
       NSLog(@"嵌套查询:%@",ageResult);
    

    效果如图所示:


    05.png
    三、删

    文档示意:

    06.png

    演示代码:

       //3.删除数据
       RLMResults *results = [StudentModel objectsWhere:@"name = '张三'"];
       StudentModel *model = results.firstObject;
       //删除的模型,一定要是被realm所管理的,不能是新建的模型
       [realm transactionWithBlock:^{
           [realm deleteObject:model];
      }];
    

    如图所示:

    07.png

    3.2 删除某个模型下的所有数据
    (此步骤不可以,可以放在最后来试)

       //删除某一个模型下的所有数据,如删除>StudentModel表里面的所有数据
       RLMResults *results2 = [StudentModel allObjects];
       for (StudentModel *model in results2) {
           [realm transactionWithBlock:^{
                [realm deleteObject:model];
          }];
      }
    

    如图所示:

    011.png
    四、改

    文档示意:

    08.jpg

    演示代码

    4.1更改模型属性

       
       //4.1更改模型属性
       //修改的模型,一定是被realm所管理的模型,不能是alloc init 新建的模型
       RLMResults * _Nonnull result = [StudentModel objectsWhere:@"name = '李四'"];
       StudentModel *model = result.firstObject;
       [realm transactionWithBlock:^{
           model.name = @"李四名字更改了";
       }];
       
    

    如图所示:

    09.png

    4.2 通过主键更改模型属性

       //如果模型没有主键,更新的时候会报错
       // reason: ''StudentModel' does not have a primary key and can not be updated'
       StudentModel *model = [[StudentModel alloc]initWithValue:@{@"studentID":@"003",@"name":@"王五名字年龄都更改了",@"age":@108}];
       [realm transactionWithBlock:^{
           [realm addOrUpdateObject:model];
       }];
    

    如图所示:

    010.png
    以上是realm数据库简单的增、删、改、查操作。参考文档,通过一个小例子来了解学习。
    上面只是简单的示例,实际开发中也会遇到一些问题和注意事项,以下总结一下本人遇到的问题及注意事项,共同学习。
    • 注意事项-realm支持的数据类型仅包含以下几种
      Realm 支持下述属性类型:BOOLboolintNSIntegerlonglong longfloatdoubleNSStringNSDateNSData 以及 被特殊类型标记的 NSNumber
    • 问题记录
      被忽略属性,即不想存在数据库中的字段,可以重写 +ignoredProperties方法,或者在属性前增加 (readonly)字段;
    // 方法①
    + (NSArray *)ignoredProperties {
       return @[@"tmpID"];
    }
    // 方法②
    @property (readonly) NSString * tmpID; // 只读属性会被自动忽略
    

    Realm其它用法:
    iOS - objective-c中realm的对应关系
    iOS - objective-c中realm的迁移

    END.

    相关文章

      网友评论

          本文标题:iOS - objective-c中realm的简单实用

          本文链接:https://www.haomeiwen.com/subject/tmdmzktx.html