当前位置: 首页 > 面试题库 >

iOS 9和WatchOS 2上的NSUserDefaults(suiteName :)-不起作用吗?

郑光济
2023-03-14
问题内容

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

在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

应用组功能已打开,并且两个目标上的相应组均已选中。

现在,当我在watch objectForKey上运行读取的代码时,返回nil,但它在iOS上有效(设备和模拟器的结果相同)。

我想念什么!?


问题答案:

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

  1. Apple Watch流程
  2. iPhone程序

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

如果要将手机中的内容保存到Apple Watch Target上的NSUserDefaults中,请执行以下操作:

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



 类似资料:
  • 问题内容: 我刚刚安装了最新的Xcode Beta,以尝试 Swift 2 和对Apple Watch开发部分的改进。 我实际上很难弄清楚为什么这种基本方法无法在 iOS 和 Watch OS2 之间共享信息。 我跟着这 一步一步的 教程来检查,如果我错过了在这个过程中的东西,如打开同一组的手机应用和扩展双方,但这里是我的了: NOTHING 。 这是我在iPhone应用程序中为ViewContr

  • 我创建了一个使用FocusListener的应用程序,以确保文本fieid的值始终为正数。当用户输入负值,然后单击“tab”键将焦点从文本字段移开时,该值将乘以-1,以使结果值为正。但是,当我运行应用程序时,文本字段没有更改。我不确定我做错了什么,并会感谢任何帮助。 以下是我的代码: }

  • 问题内容: 不再是iOS 10 SDK中的类: 这无法编译。该课程被删除了吗? (这是规范的问答集,可防止重复出现的问题泛滥) 问题答案: 已重命名为。 已重命名为。 现在可以使用了。 发行前文档链接。

  • 我试图在最新的AndroidLollipop预览版本中使用elevation属性。我将targetSdk设置为21,将主题设置为Material。接下来,我在TextView中添加了一个背景形状,并将标高设置为8dp,但TextView没有显示任何阴影迹象。这是在运行Lollipop预览的Nexus7上。我还有什么要考虑的吗? 布局如下: 这是可绘制的背景: 以下是文本视图:

  • 问题内容: 我正在尝试使用NSUserDefaults将数组保存到我的应用程序的核心数据中。我认为使用NSUserDefaults会很好,但是问题是,无论我将创建默认代码的代码放在哪里,都会引发SIGABRT错误。 这是创建默认值的代码: levelsArray是List对象的数组: 如何阻止SIGABRT弹出并存储阵列。帮助将不胜感激。 问题答案: 您需要先使用NSKeyedArchiver将其

  • 问题内容: 我现在有两个类:RemindersDAO.java和ViewLocalReminders.java。 我试图访问ViewLocalReminders.java中的变量,并且试图从RemindersDAO.java调用它。我通过使用getter / setter方法组合来做到这一点。但是,由于某种原因,我的变量值在getter方法中一直设置为0。这是代码: ViewLocalRemind