使用Realm实现Extension&Host共享数据
来源:互联网 发布:安度因漫画知乎 编辑:程序博客网 时间:2024/05/08 12:40
3.这次主要讲解使用Realm进行Extension和Host共享数据
本文主要将该问题的解决过程和方法,参考资料会在本文末尾给出。
前言
Realm是一个第三方的跨平台移动端数据库,不是基于sqlite和coredata的,它做了一个自己的存储系统和数据库引擎。但是使用起来比coredata简单太多。
Extension是iOS8的SDK开放的新功能,有多种类型的Extension:
本文只讲Today Extension。
最常用的extension&host共享数据方法是利用NSUserdefault。但是一旦数据结构复杂,使用起来就非常不方便。这也要根据App的数据情况做选择,如果数据量不大,且以展示数据为主,则用userdefault,否则还是选择存数据库的方法比较合适。
正文
我要做的App,是数据量比较大,且对Extension进行交互并且要记录交互操作。对update,delete,add操作较为频繁。
下面一步步讲述我的实现过程:
1.跳过App group这些设置步骤,一搜一堆。
2.首先建立Realm数据模型,看下图:
如果你没有找到“Realm”选项,请先安装Realm的Xcode Plugin。传送门
3.文件建好之后,写好模型中所需的属性,下面是我写好的一个数据模型:
ignoredProperties:
该方法是存储时,忽略哪些属性,一般返回为空即可。 primaryKey:
设置模型的key值,同一个key值的数据,被插入两次,就会出现crash。
4.设置该模型的Target,这一步是保证Extension和Host都能识别这个模型。
5.设置Realm和SwiftRealm的Target,同上。
6.Extension和Host的存储路径是不一样的,但是我们设置了App Group之后,可以将realm数据文件保存到共享目录中。
我们通过”po Realm.defaultPath”可以看到Realm在host和extension中的路径。
这是最重要的一步,但也很简单:
在AppDelegate中写上这几句代码即可:
var config = Realm.Configuration() let container = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.com.XXX.XXX”)let realmURL = container!.URLByAppendingPathComponent("default.realm") config.path = realmURL.path Realm.Configuration.defaultConfiguration = config
这段代码就是Realm的默认存储路径。注意这里的修改只能作用于Host,这时在用”po Realm.defaultPath”查看路径,发现存储路径被切换到AppGroup下。
7.在Extension中对Realm默认路径进行设置,同上。
一些坑
虽然问题解决了,但是我自己在解决的过程中,也遇到了一些问题,现在也无解:
1.如果仅仅是设置Realm的存储路径,是可以在Realm的初始化方法中实现的:
let realm = Realm(name:path)
但是这个方法执行后,在模拟器上是OK的,一切正常,但是上真机调试,一运行就crash。
如有建议或问题,欢迎在下面留言 ^ ^
参考资料:
1.http://blog.csdn.net/ralbatr/article/details/44194389 iOS8中Today extension的使用
2.https://realm.io/docs/swift/latest/#realms Realm官方文档
3.https://github.com/realm/realm-cocoa/issues/3022 realm issue
- 使用Realm实现Extension&Host共享数据
- Today Extension 与 Host App 共享数据的3种方法
- androd使用Realm实现数据存储到手机数据库
- 使用ContentProvider实现数据共享
- 使用contentProvider实现数据共享
- 使用ContentProvider 实现数据共享
- 使用ContentProvider实现数据共享
- 使用ContentProvider实现数据共享
- Extension 与主app共享数据
- 使用Realm进行数据操作(一)
- 使用Realm进行数据操作(二)
- 第九章使用ContentProvider实现数据共享
- 使用Application来实现数据的共享
- php中使用apcu实现共享数据
- php中使用apcu实现共享数据
- App Extension 与 App 之间的数据共享
- 虚拟机使用HOST-ONLY方式共享上网
- Shiro——Realm数据交互的实现
- SSIS
- 数字增加动画
- 搭建spark开发环境
- 切换CSS实现开/关按钮切换
- SVG的marker-end显示不出来的问题
- 使用Realm实现Extension&Host共享数据
- iOS支付宝支付基于https
- App Transport Security has blocked a cleartext HTTP问题的解决
- 删除一个表中和另一个表相同的记录
- Java中的Enum(枚举)的使用与分析
- Centos部署java项目环境
- CATransition 翻页效果
- Highcharts的一些基本设置
- 机器视觉学习笔记(6)——双目摄像机标定参数说明