【问题标题】:NSUserDefaults(suiteName:) on iOS 9 and WatchOS 2 - not working?iOS 9 和 WatchOS 2 上的 NSUserDefaults(suiteName:) - 不起作用?
【发布时间】:2015-09-03 04:55:58
【问题描述】:

我以前做过,但似乎没有任何效果。这是我的代码:

保存在 iOS 应用中

let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")
groupDefaults?.setObject(theArray, forKey: "theKey")
groupDefaults?.synchronize()

阅读(适用于 iOS,但不适用于 WatchOS 2)

let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")

if groupDefaults!.objectForKey("theKey") != nil {
    textEmojiArray = NSMutableArray(array: groupDefaults!.objectForKey("theKey") as! NSArray)
} else {        
    //error
}

两个 .entitlements 文件都包含 group.company.appSharedDefaults

App Groups 功能已打开,并在两个目标上检查了相应的组。

现在当我在手表上运行读取代码时 objectForKey 返回 nil 但它在 iOS 上工作(设备和模拟器结果相同)。

我错过了什么!?

【问题讨论】:

    标签: ios swift watchos-2 ios-extensions ios-app-group


    【解决方案1】:

    在 watchOS 2 中,您需要记住有 2 个不同的进程正在运行:

    1. Apple Watch 进程
    2. iPhone 进程

    这两个进程都有自己的沙箱,这就是他们称之为“本机”的原因,因此如果您尝试使用共享的 NSUserDefaults,它将无法正常工作,因为 Apple watch 应用程序的沙箱与主机 iPhone 应用程序完全不同。

    如果您想将手机中的某些内容保存到 Apple watch Target 上的 NSUserDefaults:

    使用 WatchConnectivity 将您要保存的数据发送到手表。 然后当手表收到你发送给它的数据后,将其保存到 Apple Watch 的默认 NSUserDefaults 中。

    【讨论】:

    • 好的,谢谢!当然,我在发布此问题后立即找到了原因。我想很多人可能有同样的问题,所以我把它留了下来。感谢您的回答
    • 这对并发症也有效吗?
    • @BrunoPhilipe 好吧,考虑到你需要一个 watchOS 2 应用程序来创建复杂功能,是的
    • According to Apple,应该可以:“在 watchOS 2 中,iOS 会自动将您的 iOS 应用首选项的只读副本转发到 Apple Watch。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    相关资源
    最近更新 更多