使iOS和watchOS应用程序可以访问SwiftyUserDefaults数组

时间:2016-02-17 03:30:01

标签: ios swift nsuserdefaults watchkit swiftyuserdefaults

我正在使用优秀的SwiftyUserDefaults,一个使用Swift的NSUserDefaults包装器,允许我的应用程序保留一定数量的数据,就像这样(删除了大量代码以显示重要部分:

工作代码

 import SwiftyUserDefaults //The following is to show implementation in the parent iOS app. It works fine.
    class ViewController: UICollectionViewController { 

    var arrayToStore = DefaultsKey<NSArray>("arrayToStore")

    override func viewDidLoad() {
         Defaults[arrayToStore] = ["Element 1", "Element 2", "Element 3"]
        }
     func aFunctionThatNeedsToReadTheArray() {
         print([Defaults[arrayToStore]])
         }
    }

研究

以上工作正常,但我也希望这个父应用程序的watchKit watchOS 2应用程序能够读取arrayToStore。

我做了一点research并了解到Apple为此提供了一个解决方案App Groups,它可以在NSUserDefaults和其他数据存储方式中实现跨应用程序 - 在这种情况下,在父iOS之间应用程序及其配套watchOS watchKit应用程序。编辑:我得知@PETAHCHRISTIAN APP组不适用于WATCHOS 2.那么,其他方法是什么?

编辑2:知道应用程序组不是解决方案,我做了一些研究,并确定可能的解决方案是WatchConnectivity框架。这是否正确,如果是,我如何使用它来允许监视应用访问arrayToStore

问题

但是,我的问题是:如何使用SwiftyUserDefaults执行此操作?我希望能够在父应用程序中使用arrayToStore数组,通过应用程序组可以通过watchOS 2应用程序读取(或者其他方式,如果有更好的方法注意:感谢@PetahChristian我已经了解到应用程序组不是这样做的方式。因此,如何通过其他方式从父应用程序获取手表应用程序读取数组的预期结果?)。

我在尝试什么:

  1. 按功能启用应用程序组&#34;功能&#34; iOS app和watchKit应用程序,打开应用程序组并选择应用程序组,如答案here
  2. 所示
  3. 在watchKit应用的应用扩展程序中,使用print([Defaults[arrayToStore]]),导致&#34;使用未解析的标识符arrayToStore&#34;。预期的结果是打印&#34;元素1&#34;,&#34;元素2&#34;,&#34;元素3&#34;

1 个答案:

答案 0 :(得分:2)

使用WatchConnectivity

您可以将手表中的请求发送到手机,然后将某些内容发回手表。我将数组存储在Singleton中,然后使用WatchConnectivity的sendMessage函数。即使iPhone应用程序处于后台,此功能也能正常工作。