3

我正在使用出色的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。

我做了一些研究,了解到苹果为此提供了一个解决方案,App Groups,它使 NSUserDefaults 和其他数据存储方式中的东西可以跨应用程序使用——在这种情况下,在父 iOS 应用程序和它的伴侣 watchOS watchKit 应用程序之间. 编辑:感谢@PETAHCHRISTIAN,我了解到应用程序组不适用于 WATCHOS 2。那么,还有哪些其他方法?

编辑 2:知道 App Groups 不是解决方案,我做了更多的研究,并确定可能的解决方案是WatchConnectivity框架。这是正确的,如果是这样,我该如何使用它来允许手表应用程序访问arrayToStore

问题

但是,我的问题是:我该怎么做SwiftyUserDefaults?我希望能够arrayToStore在父应用程序中拥有一个数组,watchOS 2 应用程序可以通过应用程序组读取(或其他方式,如果有更好的方法注意:感谢@PetahChristian,我了解到应用程序组不是方法来做到这一点。因此,我怎样才能获得手表应用程序通过其他方式从父应用程序读取数组的预期结果?)。

我正在尝试什么:

  1. 通过在 iOS 应用程序和 watchKit 应用程序的“功能”中启用应用程序组,打开应用程序组并选择应用程序组,如此处的答案所示
  2. 在 watchKit 应用程序的应用程序扩展中,使用print([Defaults[arrayToStore]]),导致“使用未解析的标识符 arrayToStore”。预期的结果是打印“元素 1”、“元素 2”、“元素 3”
4

1 回答 1

2

使用WatchConnectivity

您可以从手表向手机发送请求,然后将内容发送回手表。我会将数组存储在 Singleton 中,然后使用sendMessageWatchConnectivity 的功能。即使 iPhone 应用程序处于后台,此功能也有效。

于 2016-02-17T14:46:43.890 回答