IOS-Realm 数据库在移动端的使用
来源:互联网 发布:无线充电贴片 知乎 编辑:程序博客网 时间:2024/05/22 07:08
用 Realm 数据库做一个简单的通讯录
1.要使用 Realm 数据库, 首先要导入 Realm.framework 这个框架, 从Realm官网上可以下载,我使用的是realm-objc-2.0.3 这个版本, 下载解压完成后, 将iOS文件夹中的 static文件中的静态库拖到工程中.
2.然后点击 Targets, 选择工程, 点击 Build Phases, 添加libz.tbd 和 libc++.tbd 两个库.
3.点击 plugin 文件中的项目, 运行,然后退出 XCode, 重启 XCode, 就可以安装成功插件, 我们就可以利用插件自动生成模型类.
4.安装成功插件后, 我们 command + N 在新建文件的时候就可以找到这么个东东.
5.Realm Model Object, 顾名思义, 就是Realm 数据库存储的模型对象, 你要存储的数据都是继承自这个类的. 所以我们新建 Realm Model Object 文件时, 就会自动帮我们建立一个.h 和.m 文件.
这个模型文件的作用还是相当大的, 先按下不表
做通讯录当然离不开 tableView, 如果说 CoreData 是和 NSFetchedResultsController互相配合, 那么 Realm 就是用到了 RLMResults 这个关键类
tableView 的数据源就是这个.
// -------- 初始化数据源 --------- (RLMResults<YFPerson *> *)resultsArray{ if (!_resultsArray) { /* 按照年龄来排序 */ _resultsArray = [[YFPerson allObjects]sortedResultsUsingProperty:@"age" ascending:YES]; } return _resultsArray;}
初始化数据源数组的时候还可以设置按照什么排序, 在这里, 我就按照年龄来排序。
还有一个关键类就是RLMNotificationToken,通知令牌就是当数据库里的元素一发生变化, 就调用 block 里的代码,也非常的方便好用。
- (RLMNotificationToken *)notificationToken{ __weak typeof(self)weakSelf = self; if (!_notificationToken) { _notificationToken = [self.resultsArray addNotificationBlock:^(RLMResults<YFPerson *> * _Nullable results, RLMCollectionChange * _Nullable change, NSError * _Nullable error) { if (error) { NSLog(@"打开 realm 数据库失败,%@",error); return; } /* 如果数据库的变化为空, 则仅仅刷新 tableView */ if (!change) { [weakSelf.tableView reloadData]; } /* 如果变化不为空,则更新 tableView的数据源, 并刷新 tableView */ /* tableView开始更新 */ [weakSelf.tableView beginUpdates]; /* tableView 删除数据 */ [weakSelf.tableView deleteRowsAtIndexPaths:[change deletionsInSection:0] withRowAnimation:UITableViewRowAnimationTop];// 因为只有第0组,所以所有的更新都在第0组 /* tableView 添加数据 */ [weakSelf.tableView insertRowsAtIndexPaths:[change insertionsInSection:0] withRowAnimation:UITableViewRowAnimationTop]; /* tableView 刷新数据 */ [weakSelf.tableView reloadRowsAtIndexPaths:[change modificationsInSection:0] withRowAnimation:UITableViewRowAnimationTop]; /* tableView 结束更新 */ [weakSelf.tableView endUpdates]; }]; } /* 在这里打印一下沙盒的地址, 然后可以看到待会儿可以看到可视化的数据库 */ NSLog(@"%@",NSHomeDirectory()); return _notificationToken;}
我们在 block 回调里面插入数据,删除数据,刷新 tableView, 做这样一些操作. 当数据库数据一发生变化, 就会做相应的操作, 并刷新 tableView.
在上面这个方法, 打印下沙盒地址, 等下用的着
还有一个关键类, 就是操作数据库啦, 数据库无外乎四个字: 增,删,改,查
今天先讲一下增和删吧, 做了一个增加单个联系人,和批量增加联系人
1.增加单个联系人
RLMRealm 这个单例对象就是创建实例对象并存储到 Realm 数据库中
- (void)addUniquePerson{ /* 这个类是专门开始创建数据库的 */ /* 开始写入业务 */ [[RLMRealm defaultRealm]beginWriteTransaction]; /* 这个方法是创造一个Realm实例对象,并存储到 Realm 数据库中 */ [YFPerson createInRealm:[RLMRealm defaultRealm] withValue:@[[self randomName],@([self randomAge])]]; /* 提交写入业务 */ [[RLMRealm defaultRealm]commitWriteTransaction];}
很有必要说一下[YFPerson createInRealm:[RLMRealm defaultRealm] withValue:@[[self randomName],@([self randomAge])]];这个方法, 这个方法是基于 KVC 的, 我们在设置 value 的时候可以传入NSJSONSerialization解析出来的数组和字典, 当传入数组的时候, 所有属性都必须填写, 并且要按这个模型对象定义属性时的顺序,否则就会报错.
2.批量增加联系人
由于是耗时操作, 我们必须开启子线程
/* 添加多个数据 */- (void)addManyPersons{ /* 添加多个数据是耗时操作, 我们重新开启一个线程来操作 */ dispatch_async(dispatch_get_global_queue(0, 0), ^{ for (NSUInteger i = 0; i < 5; i++) { /* 循环内部的逻辑就跟添加单个数据一样了 */ [[RLMRealm defaultRealm]beginWriteTransaction]; [YFPerson createInRealm:[RLMRealm defaultRealm] withValue:@[[self randomName],@([self randomAge])]]; [[RLMRealm defaultRealm]commitWriteTransaction]; } });}
只要增加和批量增加的方法被触发, 就会立马刷新到 tableView 上,并且顺序是按照年龄的升序来排列的, 这是才初始化数据源数组的时候设置好的
在侧滑删除中, 我们做一个删除数据的功能, 其实跟添加数据差不多的
// -------- 侧滑打开的方法 --------- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ /* 删除数据,其实方法和添加数据是差不多的 */ if (editingStyle == UITableViewCellEditingStyleDelete) { [[RLMRealm defaultRealm]beginWriteTransaction]; [[RLMRealm defaultRealm]deleteObject:self.resultsArray[indexPath.row]]; [[RLMRealm defaultRealm]commitWriteTransaction]; }}
整个效果做出来其实是这样的:
参考链接:http://www.jianshu.com/p/4f3ebe815853
- IOS-Realm 数据库在移动端的使用
- Realm移动应用数据库使用-IOS
- IOS Realm数据库的使用
- Realm 数据库的使用(iOS &Android)
- 数据库Realm的使用
- Realm-在iOS中应用-全新的数据库思维模式
- Realm移动应用数据库使用-Android
- 专注于移动开发的数据库Realm
- Realm 数据库的简单使用
- Android Realm数据库的使用
- Realm数据库的简单使用
- 移动端专用数据库Realm介绍
- 移动端数据库新王者:realm
- 聊聊移动端跨平台数据库 Realm
- 在android中使用Realm数据库框架
- 如何在Android中使用Realm数据库
- iOS开发-Realm数据库
- iOS开发-Realm数据库
- vi 粘贴后缩进乱了
- IAR使用JTAG调试stm32
- 深入浅出设计模式之工厂模式
- [matlab-libsvm] 关于SVM参数c&g选取程序
- Java Web过滤器
- IOS-Realm 数据库在移动端的使用
- Meteor学习路程(三)之数据库的例子(4)【修改】
- poj Frogger(Dijkstra,Floyd,Spfa)
- 从头搭建TurtleBot的工作环境
- 关于验证的三个正则表达式方法
- 程序员面试金典——解题总结: 9.17中等难题 17.3设计一个算法,算出n阶乘有多少个尾随0
- 如何在Linux中加入cron任务
- java导出导入工具类使用demo
- 函数指针与函数指针数组的简单理解以及vector