一、项目环境:纯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. 对象关系映射ORM

    对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效 ...

  2. 【BZOJ 3527】【ZJOI 2014】力

    代换一下变成多项式卷积,这里是的答案是两个卷积相减,FFT求一下两个卷积就可以啦 详细的题解:http://www.cnblogs.com/iwtwiioi/p/4126284.html #inclu ...

  3. 稻壳图文模块调不出html代码

    <?php doc_article('1',20,0,0,0,266,true,true,'id',0)?> 图文调用,倒数第三个参数,官方说是是否显示html代码,但是实测是没用的,不过 ...

  4. java 读取数据库中表定义

    将数据库中的表信息读取出来 package com.cloud.smartreport.utils; import java.sql.Connection; import java.sql.Datab ...

  5. 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定

    介绍背水一战 Windows 10 之 绑定 TemplateBinding 绑定 与 RelativeSource 绑定 与 StaticResource 绑定 示例1.演示 TemplateBin ...

  6. tarjan求桥、割顶

    若low[v]>dfn[u],则(u,v)为割边.但是实际处理时我们并不这样判断,因为有的图上可能有重边,这样不好处理.我们记录每条边的标号(一条无向边拆成的两条有向边标号相同),记录每个点的父 ...

  7. ubuntu安装pip3

    当初入门Linux 使用的是centos,那个时候是6.0版本,当然现在主流在使用的也是6.0系列的,现在都到6.7了,那个时候centos还是独立的,现在被redhat收购,本来一个红蓝就差不多,个 ...

  8. oracle配置数据库连接方式

    有以下两种: (1)tnsname.ora中添加信息 例如: (2)在plsq  database下添加地址 例如:192.168.1.210:1521/orcl

  9. 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

    内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...

  10. 基于Maven引入Hadoop包报Missing artifact jdk.tools:jdk.tools:jar:1.6

    一.问题来源 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop- ...