一、项目环境:纯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. Swift基础--可选绑定和守护绑定

    Swift中的可选绑定和守护绑定 1.可选绑定 格式 // 通过url来创建request对象 if let tempUrl = url { // url为可选类型,当可选类型有值,才执行大括号里面的 ...

  2. jQ插件--时间线插件和拖拽API

    这个时间轴是工作上用到的,自己写了一个, qq空间有时间轴的控件, 百度文库也有时间轴的控件: 百度的时间轴大概是这样的: 用户点击对应的锚链接,  那个三角会滚动, 然后左侧的界面也会滚动: 实际的 ...

  3. liunx下tomcat启动 Cannot find ./catalina.sh

    执行启动tomcat命令./startup.sh 提示 Cannot find ./catalina.sh The file is absent or does not have execute pe ...

  4. JS-slider.js实现鼠标拖动滑块控制取值特效

    制作效果,如下图,鼠标点击颜色标能左右拖动并设置文本框中的值 源码: <div id="example"> <div id="slideContaine ...

  5. 12 抽象函数-abstract

    只有函数的定义,没有函数体的函数被称为抽象函数 1.抽象函数就是没有函数体的函数 2.抽象类使用abstract来定义 3.抽象类不能生产对象,但是可以拥有构造函数 abstract void fun ...

  6. SPSS 统计图形

    统计图能够简洁.直观地对主要的数据信息进行呈现,反映事物内在的规律和关联.当然难免会丢失数据的细节,鱼与熊掌不可兼得. 根据统计图呈现变量的数量将其分为单变量图.双变量图.多变量图,然后再根据测试尺度 ...

  7. Linux 爬虫

    curl https://www.msi.umn.edu/tutorial-materials >tmp.txt perl -alne '{/(https.*?pdf)/;print $1 if ...

  8. SQL查询记录是否在另一个表中存在

    1.需求 create table ta(id int);create table tb(id int);insert into ta values(1);insert into ta values( ...

  9. 【bzoj3991】 寻宝游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=3991 (题目链接) 题意 给出一个n个节点的带权树,m次操作每次修改一个关键点,求每次操作后,从其中 ...

  10. 根据xsd生成C#类

    var file = "1.xsd"; // Get the namespace for the schema. CodeNamespace ns = Processor.Proc ...