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

本文參照http://zhuchao.iosx.me/article/WatchKit-Data-Share
詳細步驟可以到這位大牛的網站學習

首先我們需要了解一下AppleWatch app(非Native)的工作原理:
手錶只負責UI的顯示,當我們爲我們的app增加了手錶的支持的時候,我們會發現
這裏寫圖片描述
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。

這裏寫圖片描述

這裏寫圖片描述

不同於平時使用 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)")
        }
    }

這樣就可以同步數據了,效果如下:
這裏寫圖片描述

可能你也看到了,這種方法屬於異步同步,當手表讀取數據的時候,手機App比並不知道,所以也沒法及時的更新數據,如何同步的共享數據呢?
下一節,我們將介紹appDelegate方式同步數據

發佈了31 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章