一、项目环境:纯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]; }

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

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

  1. MagicalRecord简单使用小记

    一般采用pod安装,导入框架 #import <CoreData+MagicalRecord.h> - (BOOL)application:(UIApplication *)applica ...

  2. gulp简单使用小记

    npm install --save-dev 写入package.json里     var gulp = require('gulp'); var less = require('gulp-less ...

  3. Synergy简单使用小记

    需求: 两台笔记本用两套键盘鼠标,那体验,糟透了. 怎样才能使得两个主机公用一套鼠标和键盘呢?上网搜索到Synergy这款软件 参考: 具体使用方法参考了这篇博文 基本使用: 这款软件分为服务端和客户 ...

  4. pop动画库简单使用小记

    - (void)animateInView:(UIView *)view{ UIImageView *imageView = [[UIImageView alloc] initWithImage:[U ...

  5. Shiro - 关于Realm

    之前在Authentication和Authorization中也提到Realm. 无论是身份验证还是权限验证,无论数据以什么方式存在,我们都需要访问一些数据并将其转换为Shiro可以识别的格式. 通 ...

  6. 基于iOS 10、realm封装的下载器

    代码地址如下:http://www.demodashi.com/demo/11653.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重,再加上iOS10和X ...

  7. window nginx 简单搭建服务器访问静态资源

    nginx命令: 启动: start nginx 停止:nginx -s stop ||  nginx -s quit 注:stop是快速停止nginx,可能并不保存相关信息:quit是完整有序的停止 ...

  8. 【转】Keberos认证原理

    前几天在给人解释Windows是如何通过Kerberos进行Authentication的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去.后来想想原因有以下两点:对于一个没有完全不了解Ker ...

  9. 微信H5支付坑一--手续费未结算

    简单随笔小记: 场景:在微信H5支付的过程中,无论怎么支付完成,在微信商户后台查询手续费依然未扣除,当时手续费账户月为5元. 解决方法:起初无论怎么测试都不知道代码到底问题出在哪里了,想一下手续费账户 ...

随机推荐

  1. 神经网络dropout

    训练集上面,加一个bool型的开关 做预测的时候,不需要打开开关,而是所有的数乘以p, 实际工业界做的时候是: 在训练的时候都除以p,在做预测的时候什么时候都不用干

  2. 计算&IO密集型任务的 优化

    问题原因: 最近由于工作实际需求,需要对某个计算单元的计算方法进行重构.原因是由于这个计算单元的计算耗时较长,单个计算耗时大约在1s-2s之间,而新的需求下,要求在20s内对大约1500个计算单元计算 ...

  3. Android NDK开发

    Android NDK 开发教程(极客学院) 一.Android NDK环境搭建 使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin( ...

  4. Android消息机制之ThreadLocal的工作原理

    来源: http://blog.csdn.net/singwhatiwanna/article/details/48350919 很多人认为Handler的作用是更新UI,这说的的确没错,但是更新UI ...

  5. 使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

    1. 概述 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具. 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐 ...

  6. ASP.NET MVC html help

    public static class HtmlHelper { /// <summary> /// 返回没有边框的只读的TextBox标签 /// </summary> // ...

  7. 【BZOJ-4653】区间 线段树 + 排序 + 离散化

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 107  Solved: 70[Submit][Status][Di ...

  8. POJ1185 炮兵阵地

    题目描述 Description 司令部的将军们打算在N × M的网格地图上部署他们的炮兵部队.一个N × M的地图由N行M列组成,地图的每一格可能是山地(用"H"表示),也可能是 ...

  9. http80端口转发(实现微信公众号接口绑定IP时,同时支持多个公众号)

    http80端口转发 背景 微信公众平台接口绑定服务器时,如果使用IP需要使用80端口,此组件可实现一个IP上绑定多个公众平台接口 使用方法 http://(IP)/WeixinMP/(转发的地址Ba ...

  10. Non Lasting Storage File System、procfs、sysfs

    catalog . 引言 . proc文件系统 . 简单的文件系统 . sysfs 0. 引言 传统上,文件系统用于在块设备上持久存储数据,但也可以使用文件系统来组织.提供.交换并不存储在块设备上的信 ...