【发布时间】:2016-05-28 14:31:53
【问题描述】:
我正在使用出色的SwiftyUserDefaults,它是NSUserDefaults 与 Swift 的包装器,以允许我的应用保存一定的数据数组,就像这样(删除了大量代码以仅显示重要部分:
工作代码
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,我了解到应用程序组不适用于 WATCHOS 2。那么,还有哪些其他方法?
编辑 2:知道 App Groups 不是解决方案,我做了更多研究并确定可能的解决方案是WatchConnectivity 框架。这是否正确,如果正确,我该如何使用它来允许手表应用访问arrayToStore?
问题
但是,我的问题是:如何使用SwiftyUserDefaults 执行此操作?我希望能够拥有arrayToStore,父应用程序中的一个数组,watchOS 2 应用程序可以通过应用程序组读取(或其他方式,如果有更好的方法注意:感谢@PetahChristian,我了解到应用程序组不是这样做的方法。因此,我怎样才能获得手表应用程序通过其他方式从父应用程序读取数组的预期结果?)。
我正在尝试什么:
- Enable app groups by,在iOS app和watchKit app的“Capabilities”中,打开app groups,选择app group如答案here
- 在 watchKit 应用的应用扩展中,使用
print([Defaults[arrayToStore]]),导致“使用未解析的标识符 arrayToStore”。预期的结果是打印“元素 1”、“元素 2”、“元素 3”
【问题讨论】:
-
@PetahChristian 谢谢!如果您发布有关如何在没有应用程序组的情况下执行此操作的答案,我很乐意接受!
标签: ios swift nsuserdefaults watchkit swiftyuserdefaults