免费开源的iOS开发学习平台

Realm介绍:4-Realm使用示例

本节我们通过一个简单的示例介绍一下Realm的使用方法,在该示例中,涉及到使用Realm进行数据的创建以及存取操作,可以比较直观的体会Realm使用的简便之处。

创建RLMObject类

我们首先创建一个WebSite类,该类是RLMObject类的一个子类。

在WebSite.h中,我们添加两个属性webName和html,都是NSString类型的。需要大家注意的是,在RLMObject类中添加的属性,是不需要指定属性关键字的,完全交由Realm处理。

#import <Realm/Realm.h>
@interface WebSite : RLMObject
@property NSString *webName;
@property NSString *html;
@end
RLM_ARRAY_TYPE(WebSite)

存储操作

对于RLMObject类型的对象,我们可以直接对创建的对象进行存储。

  • 第一步,创建对象。例如,我们创建两个WebSite类的对象。
    WebSite *webSite1 = [[WebSite alloc] init];
    webSite1.webName = @"99iOS";
    webSite1.html = @"http://www.99ios.com";
    
    WebSite *webSite2 = [[WebSite alloc] init];
    webSite2.webName = @"sina";
    webSite2.html = @"http://www.sina.com.cn";
  • 第二步,写入Realm数据库。我们需要获取一个Realm数据库,然后在一个事务中调用addObject:方法,即可把一个对象写入到Realm数据库中.
    RLMRealm *realm = [RLMRealm defaultRealm];
    [realm transactionWithBlock:^{
        [realm addObject:webSite1];
        [realm addObject:webSite2];
    }];

查询操作

Realm中也提供了功能强大的数据查询能力,如果会使用SQL语言的话,上手的难度更低。在Realm的查询功能中,也可以像SQL一样使用各种条件查询关键字,查询的结果会保存在一个RLMResults类的数组中。

  • 全量查询。通过调用allObjects方法,即可从Realm数据库中,获取存储的某个RLMObject子类的所有对象,这类似于SQL中从某张表中查询得到该表中的所有数据。
    RLMResults <WebSite *> *webSites = [WebSite allObjects];
    NSLog(@"webSites count:%lu",(unsigned long)webSites.count);
  • 条件查询。我们可以使用objectsWhere:方法,设置一些查询条件,从而查询出符合条件的对象。Realm的查询条件可以使用==、<=、<、>=、>、!=、BETWEEN、CONTAINS 以及 ENDSWITH等多种操作符。
    RLMResults <WebSite *> *webSitesWithCondition = [WebSite objectsWhere:@"webName == '99iOS'"];
    NSLog(@"html:%@",[webSitesWithCondition firstObject]);

更新操作

当我们需要对Realm中存储的对象进行更新修改操作时,我们首先需要查询出满足修改条件的对象,然后调用beginWriteTransaction方法,开启一个写事务,然后对对象的属性进行修改,修改完成后需要调用commitWriteTransaction方法提交事务。例如,下方的代码查询出webName是sina的对象,并对其属性进行修改。

    RLMResults <WebSite *> *webSitesWithCondition = [WebSite objectsWhere:@"webName == 'sina'"];
    WebSite *webSite = [webSitesWithCondition firstObject];
    RLMRealm *realm = [RLMRealm defaultRealm];
    [realm beginWriteTransaction];
    webSite.webName = @"baidu";
    webSite.html = @"http://www.baidu.com";
    [realm commitWriteTransaction];

删除操作

当需要在Realm中删除某些对象时,可以调用deleteObjects:方法,需要注意的是,该方法的执行需要在一个事务中进行。例如,下方的代码查询出所有webName为99iOS的对象,并从Realm数据库中删除。

    RLMResults <WebSite *> *webSitesWithCondition = [WebSite objectsWhere:@"webName == '99iOS'"];
    RLMRealm *realm = [RLMRealm defaultRealm];
    [realm transactionWithBlock:^{
    [realm deleteObjects:webSitesWithCondition];
    }];

使用Realm Browser查看Realm数据库内容

Realm默认的数据库保存在App的沙盒中,我们可以通过Realm Browser查看其中存储的内容。