2

最近刚开始 swift 并通过使用应用程序组在 iOS 设备之间共享数据遇到了问题。

基本上我已经按照以下步骤设置了项目:

[苹果手机]

  • 为 iPhone 目标启用 App Group
  • 下面的初始数据(groupID 与我在项目中设置的匹配):

    sharedDefaults = NSUserDefaults.init(suiteName: groupID)
    sharedDefaults?.setObject("User Default Shared String", forKey: "test")
    sharedDefaults?.synchronize()
    
  • 通过在本地加载用户默认值来仔细检查测试字符串,该字符串能够显示在日志中。

    let t_sharedDefaults =  NSUserDefaults.init(suiteName: groupID);
    t_sharedDefaults?.synchronize();
    let str = t_sharedDefaults?.valueForKey("test") as! String;
    print(str);
    

[手表延长]

  • 创建一个新的监视扩展目标。
  • 启用应用程序组。
  • 通过以下代码在上下文中加载用户默认数据:

    sharedDefaults = NSUserDefaults.init(suiteName: groupID);
    sharedDefaults?.synchronize();
    let str = sharedDefaults?.valueForKey("test")
    print(str);
    

我先运行 iPhone 目标,然后运行手表应用程序。但是,手表应用程序无法从用户默认值中读取预期数据。

我也在 Github 上传了测试项目,如果您对这个问题有任何想法,请告诉我。

[Github]

https://github.com/mattcn/WatchOS_DataSharing

提前感谢您的帮助。

4

2 回答 2

0

在 Watch OS1 中这有效,但在 Watch OS2 中发生了一些变化。您需要使用称为 WatchConnectivity 的东西将要保存的数据发送到手表。因此,即使您使用共享用户默认值或应用程序组,您放入其中的数据也会在手表上,因此无法从 iOS 应用程序访问。

要将数据发送到手表,您可以使用 WatchConnectivity 框架。

于 2016-02-16T12:06:44.510 回答
0

感谢 Ashish 提出了 OS1 和 OS2 之间的差异。

刚刚找到了一个很好的参考: iOS 9 和 WatchOS 2 上的 NSUserDefaults(suiteName:) - 不起作用?

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

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

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

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

于 2016-02-16T13:12:35.687 回答