[WatchKit][AppleWatch和iPhone通信][方法1]App Group

本文参照http://zhuchao.iosx.me/article/WatchKit-Data-Share
详细步骤可以到这位大牛的网站学习

首先我们需要了解一下AppleWatch app(非Native)的工作原理:
手表只负责UI的显示,当我们为我们的app增加了手表的支持的时候,我们会发现
[WatchKit][AppleWatch和iPhone通信][方法1]App Group_第1张图片
Xcode会为我们创建两个Group(文件夹):

  • WatchKit Extension
  • WatchKit App

前者顾名思义,是一个手表应用的扩展,它运行在手机后台,因为手表的性能有限,所以使用手机的处理器处理数据,这里面的InterfaceController类似于我们普通应用的ViewController,我们可以绑定WatchKit App storyboard里面的UI控件,进行一系列操作

后者是运行在手机里的视图,可以看到,只有storyboard和图标管理文件

举个例子,如果我们需要往手表的lable中,写入指定的字符串,就需要在InterfaceController中添加,这里就不详述步骤,很多帖子都有介绍。

但是当我们需要的数据来源,是来自我们手机App的时候,我们就会遇到一个问题,我们没办法引用手机App部分的 类和数据,因为手机App和手表App是两个运行环境,原因嘛,我猜是因为安全考虑

我们可以使用两种方法共享数据,第一种是纯共享数据,叫做App Group机制,
另一种是通过AppDelegate代理机制,可以把手表的数据请求代理给本地App的AppDelegate处理,更加灵活,可以实现实时的查询和同步,但是可能会更消耗系统资源

本文讲解第一种

App Group 是一个 App 与其扩展均可以访问的本地文件系统的一块区域。由于 Watch App 与 iOS App 是在不同的沙盒环境下运行,正常情况下他们彼此无法分享数据,因此,我们需要创建一个 App Group,使的它们拥有一个共享的文件区域。

点击项目,在 target 里分别打开项目本身和 Watch App 的 App Groups,点击加号,添加一个 App Group,输入一个唯一的标识符。我们之后会在 Watch App 和 iOS App 中通过该标识符访问同一个 App Group。

[WatchKit][AppleWatch和iPhone通信][方法1]App Group_第2张图片

[WatchKit][AppleWatch和iPhone通信][方法1]App Group_第3张图片

不同于平时使用 defaultUserDefault,在这里我们需要指定 app group,使得 Watch App 与 iOS App 可以分享用户设置。我们使用 initWithSuiteName: 方法,其参数就是 app group identifier

然后就可以添加数据存取的方法了,
我们的实验是从手机App存储数据,从手表App读取数据

在手机App的viewController中,添加一个方法,我添加的方法是一个按键的action:

    @IBAction func syncData(sender: UIButton) {

        if let userDefault:NSUserDefaults = NSUserDefaults(suiteName: "group.AWdataShare") {
            userDefault.setInteger(textField.text.toInt() ?? 0, forKey: "IntergerValue")
        }

    }

例子中是存储的整数,其实我们还可以存储其他类型的数据,请自行摸索

然后在手表App的InterfaceController中,添加读取方法,同样我的方法是一个手表按键的action:

    @IBAction func syncData() {
        if let userDefault:NSUserDefaults = NSUserDefaults(suiteName: "group.AWdataShare") {
            let value = userDefault.integerForKey("IntergerValue")
            self.lable.setText("\(value)")
        }
    }

这样就可以同步数据了,效果如下:
[WatchKit][AppleWatch和iPhone通信][方法1]App Group_第4张图片

可能你也看到了,这种方法属于异步同步,当手表读取数据的时候,手机App比并不知道,所以也没法及时的更新数据,如何同步的共享数据呢?
下一节,我们将介绍appDelegate方式同步数据

你可能感兴趣的:(iOS8,watchKit)