使用Realm实现Extension&Host共享数据

3.这次主要讲解使用Realm进行Extension和Host共享数据
本文主要将该问题的解决过程和方法,参考资料会在本文末尾给出。


前言

Realm是一个第三方的跨平台移动端数据库,不是基于sqlite和coredata的,它做了一个自己的存储系统和数据库引擎。但是使用起来比coredata简单太多。
Extension是iOS8的SDK开放的新功能,有多种类型的Extension:

extension category

本文只讲Today Extension。
最常用的extension&host共享数据方法是利用NSUserdefault。但是一旦数据结构复杂,使用起来就非常不方便。这也要根据App的数据情况做选择,如果数据量不大,且以展示数据为主,则用userdefault,否则还是选择存数据库的方法比较合适。


正文

我要做的App,是数据量比较大,且对Extension进行交互并且要记录交互操作。对update,delete,add操作较为频繁。

下面一步步讲述我的实现过程:
1.跳过App group这些设置步骤,一搜一堆。
2.首先建立Realm数据模型,看下图:

create realm

如果你没有找到“Realm”选项,请先安装Realm的Xcode Plugin。传送门

3.文件建好之后,写好模型中所需的属性,下面是我写好的一个数据模型:

realm model

ignoredProperties:该方法是存储时,忽略哪些属性,一般返回为空即可。
primaryKey:设置模型的key值,同一个key值的数据,被插入两次,就会出现crash。

4.设置该模型的Target,这一步是保证Extension和Host都能识别这个模型。

target

5.设置Realm和SwiftRealm的Target,同上。

6.Extension和Host的存储路径是不一样的,但是我们设置了App Group之后,可以将realm数据文件保存到共享目录中。
我们通过”po Realm.defaultPath”可以看到Realm在host和extension中的路径。

realm path

这是最重要的一步,但也很简单:
在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。

如有建议或问题,欢迎在下面留言 ^ ^
wechat


参考资料:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值