Realm简单使用小记

一、项目环境:纯OC

载入Realm:

pod ‘Realm‘

二、为了方便调用可以写一个Realm类的分类

#import <Foundation/Foundation.h>
#import <Realm/Realm.h>

@interface RLMRealm (Extension)

+ (instancetype)shareDataBase;

@end
@implementation RLMRealm (Extension)

+ (instancetype)shareDataBase {
    static RLMRealm *currentDataBase = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        RLMRealmConfiguration *configuration = [RLMRealmConfiguration defaultConfiguration];
        configuration.path = [[[configuration.path stringByDeletingLastPathComponent]stringByAppendingPathComponent:@"Test"] stringByAppendingPathExtension:@"realm"];
        currentDataBase = [RLMRealm defaultRealm];
    });
    return currentDataBase;
}

@end

三、先看看,外界怎么调用

1、更新RLMObject对象:用含有继承自RLMObject的对象的属性信息的其他类实例来更新RLMObject对象
RLMRealm *realm = [RLMRealm shareDataBase];
[realm beginWriteTransaction];

      // TestUser继承自NSObject,其属性上包含了TestUser类需要的属性
      TestUserInfo *user = // 这里可以是从网络获取的一个转化后的实例

      // TestUser继承自RLMObject
      [TestUser createOrUpdateInRealm:realm withValue:user];
      // 等价于 [realm addOrUpdateObject:user];

[realm commitWriteTransaction];
2、更新RLMObject对象:继承自RLMObject的对象属性有变化需要保存
 

RLMRealm *realm = [RLMRealm shareDataBase];

[realm beginWriteTransaction];


                    // TestUser继承自RLMObject

TestUser *user = [TestUser currentUser];


user.phoneNumberChange = NO;


[TestUser createOrUpdateInRealm:realm withValue:user];

[realm commitWriteTransaction];

 

至于上面的[TestUser currentUser]方法,一般可这样写

+ (TestUser *)currentUser {

    NSString *phoneNumber = //比如用户存在偏好里的密码,或者九宫格之类的密码

// objectsWhere来自RLMObject的方法,用于某个过滤操作
RLMResults *result = [TestWUser objectsWhere:[NSString
stringWithFormat:@"phoneNumber = ‘%@‘",phoneNumber]];

if (result.count) {
        _currentUser = [result lastObject];
}

else
        _currentUser = [[TestUser allObjectsInRealm:[RLMRealm shareDataBase]] lastObject];

     return _currentUser;
}

其他操作,用户退出时,得判断下是否正在写入数据,是的话得取消写入操作

                [TestUser logout];

                RLMRealm *realm = [RLMRealm shareDataBase];
                if (realm.inWriteTransaction) {
                    [realm cancelWriteTransaction];
                }        

四、最后,大体上简单的操作已经完成了,现在最重要的还是在delegate文件里的一些设置了

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        // 一些其他配置代码......
        [self configureRLMDataBase];
        // 一些其他配置代码......

}
- (void)configureRLMDataBase {
    RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];

        // 设置新的架构版本。这个版本号必须高于之前所用的版本号(如果您之前从未设置过架构版本,那么这个版本号设置为 0)
    config.schemaVersion = SCHEMAVERSION;

    // 设置闭包,这个闭包将会在打开低于上面所设置版本号的 Realm 数据库的时候被自动调用
    config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
        // 目前我们还未进行数据迁移,因此 oldSchemaVersion == 0
        if (oldSchemaVersion < SCHEMAVERSION) {
            [migration enumerateObjects:QHWUser.className
                                  block:^(RLMObject *oldObject, RLMObject *newObject) {

                                      // 将名字进行合并,存放在 fullName 域中
//                                      newObject[@"testString"] = [NSString stringWithFormat:@""];
                                      newObject[@"zfbfeerate"] = [NSString stringWithFormat:@""];
                                      newObject[@"wxfeerate"] = [NSString stringWithFormat:@""];

                                  }];
        }
    };

    // 告诉 Realm 为默认的 Realm 数据库使用这个新的配置对象
    [RLMRealmConfiguration setDefaultConfiguration:config];

    // 现在我们已经告诉了 Realm 如何处理架构的变化,打开文件之后将会自动执行迁移
    [RLMRealm defaultRealm];

}

其他高级用法,还是得根据各公司的项目来进行延伸和拓展了

时间: 2024-07-28 18:24:56

Realm简单使用小记的相关文章

Synergy简单使用小记

需求: 两台笔记本用两套键盘鼠标,那体验,糟透了. 怎样才能使得两个主机公用一套鼠标和键盘呢?上网搜索到Synergy这款软件 参考: 具体使用方法参考了这篇博文 基本使用: 这款软件分为服务端和客户端,具体设置将主机设置为服务端,从机设置为客户端.在同一局域网内. 设置客户端 客户端有交互配置服务端中的屏幕和连接 这个配置主要是选择你的电脑之间的关系,上下关系切换鼠标只能通过鼠标上下移动切换,左右通过左右切换,这看你电脑的位置来设置了, 此外,电脑名字需要设置成你电脑的名字,不能随便起名. 设

MagicalRecord简单使用小记

一般采用pod安装,导入框架 #import <CoreData+MagicalRecord.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 其他代码操作...... [MagicalRecord setupCoreDataStack]; // 其他代码操作...... } - (void)applicatio

iOS开发-数据持久化Realm的简单使用

Realm是和SQLite一样用于数据存储,但是它有几个特点比其它的数据库要好用: 1.跨平台 :现在绝大多数的应用开发并不仅仅只在 iOS 平台上进行开发,还要兼顾到 Android 平台的开发.为两个平台设计不同的数据库是愚蠢的,而使用 Realm 数据库, iOS 和 Android 无需考虑内部数据的架构,调用 Realm 提供的 API 就可以完成数据的交换,实现 “ 一个数据库,两个平台无缝衔接 ” . 2.简单易用 : Core Data 和 SQLite 冗余.繁杂的知识和代码足

Shiro - 关于Realm

之前在Authentication和Authorization中也提到Realm. 无论是身份验证还是权限验证,无论数据以什么方式存在,我们都需要访问一些数据并将其转换为Shiro可以识别的格式. 通常一个数据源对应一个Realm.因此,实现一个Realm时会用到该数据源相关的API. 通常一个数据源中会同时保存身份相关数据与权限相关数据.因此,一个Realm实现类可以进行认证和授权两种操作. 可以将Realm简单地理解为DAO. (虽然IDEA生成的type hirarchy diagram很

【转】Keberos认证原理

前几天在给人解释Windows是如何通过Kerberos进行Authentication的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去.后来想想原因有以下两点:对于一个没有完全不了解Kerberos的人来说,Kerberos的整个Authentication过程确实不好理解--一会儿以这个Key进行加密.一会儿又要以另一个Key进行加密,确实很容易把人给弄晕:另一方面是我讲解方式有问题,一开始就从Kerberos的3个Sub-protocol全面讲述整个Authentication

[转载]kerberos认证原理

前几天在给人解释Windows是如何通过Kerberos进行Authentication的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去.后来想想原因有以下两点:对于一个没有完全不了解Kerberos的人来说,Kerberos的整个Authentication过程确实不好理解——一会儿以这个Key进行加密.一会儿又要以另一个Key进行加密,确实很容易把人给弄晕:另一方面是我讲解方式有问题,一开始就从Kerberos的3个Sub-protocol全面讲述整个Authentication

Android目前流行三方数据库ORM分析及对比

Android 平台上的数据库框架非常多,但是有一个共同特点就是基于对象关系映射(ORM)模型的.实现的目标也都是不需要写SQL语句,通过对对象的操作保存和操作数据.要是从语法的简洁性来说都有自己的特点,总的来说不相上下,因此只能从数据的性能上来抉择了. 首先我们先看看目前最常用的数据库框架介绍(排名不分先后) GreenDao 简单介绍:GreenDao是为Android设计的对象关系映射(ORM)工具.它提供了对象到关系型数据库SQLite的相应接口.为了在Android工程中使用green

Realm数据库的简单介绍和使用

给大家介绍一个数据库操作的框架Realm,本文主要以iOS 平台的使用场景为例. realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android: 核心数据引擎由C++打造,并不是建立在SQLite之上的ORM, 拥有独立的数据库存储引擎: 据官方称性能上比sqlite, coredata牛逼,而且使用起来更加简单, 更易入门. 下载地址:https://realm.io/cn/ 使用教程:https://realm.io/docs/objc/

Realm数据库的使用(一)数据库的简单介绍和模型的创建

Realm 是一种可以替代SQLite 和CoreData的移动端数据库 使用前提: iOS >= 7 or Mac OS X >= 10.9 Xcode >= 6 Both Objective-C & Swift are supported. 安装: 可通过CocoaPods加入项目中 pod serarch 'Realm' Realm浏览器/数据库管理器 可以通过工具查看和浏览数据 Xcode 插件: 一个可以快速创建Realm模型的插件 模型: Realm 数据模型其实就是