我正在使用优秀的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。
我做了一些研究,发现Apple提供了一个解决方案App Groups,它使得NSUserDefaults和其他数据存储方式可以在应用之间共享 - 在这种情况下,共享iOS父应用程序和其伴随的watchOS watchKit应用程序之间的数组。编辑:我通过@PETAHCHRISTIAN学会了App Groups不能用于WatchOS 2。那么,还有哪些其他方法?
编辑2:知道App Groups不是解决方案后,我做了更多的研究,并确定可能的解决方案是WatchConnectivity
框架。如果是这样,我该如何使用它来允许手表应用程序访问arrayToStore
?
问题
然而,我的问题是:如何使用SwiftyUserDefaults
实现这一点?我希望能够通过应用组(或其他方式,如果有更好的方法,请注意:感谢@PetahChristian,我已经知道App Groups不是这样做的方法。因此,我如何通过其他方式获得手表应用程序从父应用程序读取数组的期望结果?)使父应用程序中的一个数组arrayToStore
可以被watchOS 2应用程序读取。
我的尝试:
- 通过在iOS应用程序和watchKit应用程序的“功能”中打开应用组并选择应用组来启用应用组,如此处所示。
- 在watchKit应用程序的应用程序扩展中使用
print([Defaults[arrayToStore]])
,结果是“未解决的标识符arrayToStore”。预期结果是打印“Element 1”,“Element 2”,“Element 3”。