ios realm 文件_iOS 数据持久化方案-Realm的使用

本文详细介绍了 Realm 数据库在 iOS 开发中的使用,包括 Realm 的优势、安装方式、数据模型创建、增删改查操作、辅助工具 Realm Browser 的使用,以及对象级别的通知和数据库迁移。通过实例展示了 Realm 在 iOS 应用中的具体应用和最佳实践。
摘要由CSDN通过智能技术生成

总体内容

1、Realm介绍

2、使用教程与辅助工具

3、Realm的具体使用

一、Realm介绍

1.1、Realm是一个跨平台移动数据库引擎,支持iOS、OS X(Objective-C和Swift)以及Android,核心数据引擎C++打造,并不是建立在SQLite之上的ORM, 是拥有独立的数据库存储引擎,具体详情。ORM:对象-关系映射(OBJECT/RELATIONALMAPPING,简称ORM),ORM技术是在对象和关系之间提供了一条桥梁。

1.2、Realm性能:比sqlite, coredata牛逼

1.3、Realm使用方面:相比于sqlite, coredata, 使用起来更加简单, 更易入门。

二、使用教程与辅助工具

Realm 教程页面

,打开后等待一下会自动转化为中文界面

在上面的教程里面我们可以看到有很多语言,我们关注的是 Swift 与 OC,导入Realm方式如下:

导入方式一:CocoaPods 导入Swiftpod 'RealmSwift'OCpod 'Realm'建议在终端运行 pod repo update以使CocoaPods最新的Realm版本。

导入方式二:手动导入,步骤如下根据自己的需要选择相应的 Realm.framework

<2>、前往 Xcode 工程的 “General” 设置选项卡中,从 ios/dynamic/、osx/、tvos/ 或者 watchos/ 目录中,将 Realm.framework 拖曳到 “Embedded Binaries” 部分内。请确保勾选了 Copy items if needed(除非项目中有多个平台都需要使用 Realm ),然后单击 Finish按钮;提示:在把 Realm.framework拖进项目后一定要在 TARGET->General->Embedded Binaries里面把这 Realm.framework添加进来,否则运行会崩溃

添加动态库

<3>、在单元测试目标的 “Build Settings” 中,将 Realm.framework 的父目录添加到 “Framework Search Paths” 部分中;提示这一步一般在你把 Realm.framework 拖进项目就会自动完成

<4>、如果使用了 Realm Swift,请将 Swift/RLMSupport.swift 文件拖曳到 Xcode 工程的文件导航栏中,请确保选中了 Copy items if needed 选择框;

<5>、如果在 iOS、watchOS 或者 tvOS 工程中使用 Realm,请在应用目标的 “Build Phases” 中创建一条新的 “Run Script Phase”,然后将下面这段代码粘贴到脚本文本框内:bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework/strip-frameworks.sh"添加后的效果:

添加后的效果

因为要绕过 App Store 出现的提交 bug, 因此这一步在打包通用二进制文件时是必须的。

2.2、Realm 辅助工具

<1>、Realm Browser: 可视化访问 Realm 数据库,与SqliteManger 打开 Sqlite数据库一样,Realm Browser 用来打开 Realm 数据库

Realm Browser

<2>、Realm在xcode里面使用的插件Alcatraz(有点大),它 可以快速创建Realm可存储模型对象

插件

下载后,打开运行一下

查看是否插件安装成功,创建一个类,滚到最下面看是否有如下图所示:

查看是否插件安装成功

三、Realm的具体使用,

3.1、简单的数据操作:使用 RLMRealm 对象, 保存指定模型

(1)、创建一个模型 Student继承于 RLMObject,看准了不是继承于 NSObject,如果在 2.2 里面安装了插件并运行后,插件生效,就可以快速创建 Realm的model了,如下图

创建属于Realm的model

(2)、在Student类里面定义属性:由于Realm 在自己的引擎内部有很好的语义解释系统,所以 Objective‑C 的许多属性特性将被忽略,如nonatomic, atomic, strong, copy 和 weak 等。 因此为了避免误解,官方推荐在编写数据模型的时候不要使用任何的属性特性。/** 学生的唯一ID */

@property int studentId;

/** 学生的名字 */

@property NSString *studentName;

(3)、创建对象的方式方式一:普通创建Student *student = [[Student alloc]init];

student.studentId = @1;

student.studentName = @"小王";方式二:通过父类 RLMObject 中的方法 initWithValue 快速创建,可以放字典,也可以放数组,如下// 数组

Student *student = [[Student alloc]initWithValue:@[@2,@"小冯"];

// 字典

Student *student = [[Student alloc]initWithValue:@{@"studentId":@2,@"studentName":@"小冯"}];提示:放数组要与 model 里面的属性顺序保持一致,放字典的话键值保持一致

注意:所有的必需属性都必须在对象添加到 Realm 前被赋值

(4)、使用 RLMRealm 对象, 保存指定模型,如下,我们采用 initWithValue 快速创建并保存// 获取RLMRealm对象

RLMRealm *realm = [RLMRealm defaultRealm];

// 创建对象

Student *student = [[Student alloc]initWithValue:@{@"studentId":@2,@"studentName":@"小冯"}];

保存模型方式一:开启事务,写入数据,关闭事务// 开启事务

[realm beginWriteTransaction];

// 写入数据

[realm addObject:student];

// 关闭事务

[realm commitWriteTransaction];

保存模型方式二:使用 block[realm transactionWithBlock:^{

[realm addObject:student];

}];

保存模型方式三[realm transactionWithBlock:^{

[Student createInRealm:realm withValue:@{@"studentId": @3, @"studentName": @"王小二"}];

}];提示:所有的必需属性都必须在对象添加到 Realm 前被赋值,并且使用 Realm 对象写入值保存模型还可以开启线程来保存模型

3.2、使用 RLMRealm 对象, 更新指定模型

更新模型方式一:在事务中直接更新对象Student *student = [[Student alloc]initWithValue:@{@"studentId":@3,@"studentName":@"王小二"}];

RLMRealm *realm = [RLMRealm defaultRealm];

// 保存模型

[realm transactionWithBlock:^{

// 写入数据

[realm addObject:student];

}];

// 更新模型:这里的更新模型一定是被realm所管理的模型

[realm transactionWithBlock:^{

// 写入数据

student.studentName = @"王冲";

}];提示:上面的 student 已经被 realm 所管理,而且已经和磁盘上的对象进行地址映射更新模型一定是被 realm 所管理的模

更新模型方式二:根据 主键 进行更新

(1)、上面的Student我们还没有设置主键,现在在 Student.m 里面设置一下 主键/** 设置主键 */

+(NSString *)primaryKey{

return @"studentId";

}

(2)、在事务中调用方法:[realm addOrUpdateObject:stu2];,如下Student *student = [[Student alloc]initWithValue:@{@"studentId":@3,@"studentName":@"王小二"}];

RLMRealm *realm = [RLMRealm defaultRealm];

// 在事务里面做处理

[realm transactionWithBlock:^{

// 根据主键更新模型

[realm addOrUpdateObject:student];

}];

更新模型方式三:也是根据 主键 进行更新

(1)、设置主键和上面的一样

(2)、在事务中调用方法:[模型类名 createOrUpdateInRealm:realm withValue:值];,举例如下:RLMRealm *realm = [RLMRealm defaultRealm];

[realm transactionWithBlock:^{

[Student createOrUpdateInRealm:realm withValue:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值