WatchKit 之 数据共享
来源:互联网 发布:linux 磁盘空间不足 编辑:程序博客网 时间:2024/06/14 14:03
- App Group
- 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 identifier
if 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 地址
0 0
- WatchKit 之 数据共享
- 数据共享之ContentProvider
- 数据共享之properties
- 数据共享之死锁
- iOS 9之WatchKit for WatchOS 2
- 数据共享之SharedPreference共享参数文件
- 笔记之application共享数据
- 数据共享之互斥量mutex
- 线程之控制数据共享
- Android之ContentProvider(数据共享)
- 数据共享之共享数据带来的问题
- 多线程之不共享数据和共享数据
- android共享数据之SharedPreferences-组建间的数据共享和应用间的数据共享
- DLL之共享数据段(转)
- MFC 之 程序中共享数据段
- android开发之-数据共享(SharedPreferences )
- android之activity之间共享数据 startActivityForResult
- Android应用间数据共享之ContentProvider
- Solr快速教程-下载及安装
- 控制scala并行集合的并发数量
- javaScript验证身份证号
- Android 手动显示和隐藏软键盘
- 网络摄像机的带宽占用知识
- WatchKit 之 数据共享
- JSP标签JSTL(2)--流程控制
- 技嘉主板常见问题解答
- HDU 2844 Coins (多重背包)
- Material Design Guide
- 5.3. Tuples and Sequences(元组和序列)
- 信号发送函数sigqueue和信号安装函数sigaction
- iOS使用NSUserDefaults保存用户名和密码
- Spring事务隔离级别介绍