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

Realm介绍:3-常用属性与方法

在Realm框架中,定义了大约二十个类,常用的如:RLMRealm类、RLMObject类、RLMResults类等,我们需要掌握几个核心类中定义的属性以及方法,即可开始使用Realm。

Realm的类定义说明

在Realm框架中,定义了二十个核心类、常量、枚举类型、协议等,我们可以从Realm的官方网站上查看所有的定义以及使用说明,查看地址:https://realm.io/docs/objc/latest/api/Constants.html。本节我们主要针对Realm中最核心的类进行介绍。

RLMRealm类

一个RLMRealm类的对象可以认为是一个Realm的数据库。Realm数据库既可以存储在硬盘上,同时也可以存储在内存中。RLMRealm类中,常用的属性或方法如下。

  • 获取默认的Realm数据库
+ (instancetype)defaultRealm;
  • 实例化一个RLMRealm类的对象
+ (nullable instancetype)realmWithConfiguration:(RLMRealmConfiguration *)configuration error:(NSError **)error;
+ (instancetype)realmWithPath:(NSString *)path;
  • 对Realm数据库进行读写操作
- (void)beginWriteTransaction;
- (void)commitWriteTransaction;
- (BOOL)commitWriteTransaction:(NSError **)error;
- (void)cancelWriteTransaction;
- (void)transactionWithBlock:(__attribute__((noescape)) void(^)(void))block;
  • 添加或更新对象
- (void)addObject:(RLMObject *)object;
- (void)addOrUpdateObject:(RLMObject *)object;
  • 删除对象
- (void)deleteObject:(RLMObject *)object;
- (void)deleteObjects:(id)array;
- (void)deleteAllObjects;

RLMObject类

在Realm数据库中存储的都是RMObject对象,RLMObject类是所有可以存储在Realm数据库中的对象的根类,也就是说,凡是可以存储在Realm数据库中的对象都是RLMObject类或RLMObject类的子类。在RLMObject类中,我们可以添加属性,添加的属性类型可以支持如下类型:

  • NSString:字符串
  • NSInteger, int, long, float, and double:数字型,注意没有CGFloat
  • BOOL / bool:布尔型
  • NSDate:日期型
  • NSData:二进制字符型
  • NSNumber:其中X必须是 RLMInt, RLMFloat, RLMDouble 或 RLMBool类型
  • RLMObject的子类
  • RLMArray:其中X必须是RLMObject类的子类.

RLMObject类中,比较常用如下方法:

  • 在Realm数据库中,获取该RLMObject类的所有对象
+ (RLMResults *)allObjects;
  • 根据查询条件返回满足条件的所有RLMObject类的对象
+ (RLMResults *)objectsWhere:(NSString *)predicateFormat, ...;

RLMResults类

当我们执行一个查询操作后,查询出满足条件的RLMObject对象会存放在一个RLMResults对象中。RLMResults类是一个数组类型的数据结构,因此在其类定义中,提供了很多与数组类似的属性和方法。

  • 根据索引index获取其中的某个对象
- (RLMObjectType)objectAtIndex:(NSUInteger)index;
  • 返回RLMResults对象中存储的RLMObject对象数量
@property (nonatomic, readonly, assign) NSUInteger count;
  • 返回RLMResults对象中的第一个RLMObject对象
- (nullable RLMObjectType)firstObject;
  • 返回RLMResults对象中的最后一个RLMObject对象
- (nullable RLMObjectType)lastObject;
  • 根据对象返回其索引
- (NSUInteger)indexOfObject:(RLMObjectArgument)object;