WatchKit 之 数据共享
2016-01-08 10:05
204 查看
NSUserDefault
文件
本文将介绍如何使 Watch App 与 iOS App 之间进行数据共享
App Group
App Group 是一个 App 与其扩展均可以访问的本地文件系统的一块区域。由于 Watch App 与 iOS App 是在不同的沙盒环境下运行,正常情况下他们彼此无法分享数据,因此,我们需要创建一个 App Group,使的它们拥有一个共享的文件区域。点击项目,在 target 里分别打开项目本身和 Watch App 的 App Groups,点击加号,添加一个 App Group,输入一个唯一的标识符。我们之后会在 Watch App 和 iOS App 中通过该标识符访问同一个 App Group。
NSUserDefault
不同于平时使用 defaultUserDefault,在这里我们需要指定 app group,使得 Watch App 与 iOS App 可以分享用户设置。我们使用 initWithSuiteName: 方法,其参数就是 app group identifierif let userDefault:NSUserDefaults = NSUserDefaults(suiteName: "group.watchShareData.container") { let value = userDefault.integerForKey("shareInt") self.labelValue.setText("\(value)") }
运行效果:
文件
通过 NSFileManager 的 containerURLForSecurityApplicationGroupIdentifier 方法,获得一个共享 app group 的目录。在这个目录下的文件可以在 Watch App 与 iOS App 中读写访问。在 iOS App 中,我们使用一个 imagePicker,点击图片后就将图片保存到该共享目录。
@IBAction func shareImageButtonTouched(sender: AnyObject) { self.imagePicker = UIImagePickerController() self.imagePicker.sourceType = .PhotoLibrary self.imagePicker.delegate = self self.presentViewController(self.imagePicker, animated: true, completion: nil) } func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { if let dirURL = self.getShareDirURL() { //将图片文件写入共享目录 UIImagePNGRepresentation(image).writeToURL(dirURL.URLByAppendingPathComponent("image.png"), atomically: true) } self.dismissViewControllerAnimated(true, completion: nil) } func getShareDirURL()->NSURL?{ //这里返回一个所属 App Group 的共享目录 return NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.watchShareData.container") }
在 Watch App 中,我们从该目录读取图片,并且展示
override func willActivate() { super.willActivate() if let dirURL = self.getShareDirURL() { if let imageData = NSData(contentsOfURL:dirURL.URLByAppendingPathComponent("image.png")) { self.imageInterface.setImage(UIImage(data: imageData)) } } } func getShareDirURL() -> NSURL? { return NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.watchShareData.container") }
运行效果:
本文 Demo 工程 github 地址
相关文章推荐
- Python -- 基础
- 控制scala并行集合的并发数量
- GRUB密码设置
- 使用STM32F4的CCM内存
- LaTeX中设置目录显示深度的一次乌龙经历
- 类似于聊天界面的ListView的设置
- 学习日记之命令模式和Effective C++
- 对react的几点质疑
- JVM 自带线程
- 如何解决android Toast重复显示
- Python 模拟系统登陆接口
- js對象賦值問題,已解決,未理解
- Scala学习之环境搭建
- how to cross gfs
- Ubuntu安装完后设置root密码-转
- [Windows Server 2008] 服务器安全加固
- linux下的文件颜色
- 【bzoj4059】[Cerc2012]Non-boring sequences 分治
- github 同步一个 fork
- 项目管理心得:一个项目经理的个人体会、经验总结