WatchKit 之 数据共享


本文将介绍如何使 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。

image

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)")
}

运行效果:
image

文件

通过 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")
}

运行效果:
image

本文 Demo 工程 github 地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值