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查看其中存储的内容。
文章发布时间为: December 18th , 2016 at 10:33 pm
最后编辑时间为: September 14th , 2017 at 12:52 am
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 14th , 2017 at 12:52 am
本文由 99ios 创作,转载请注明出处