- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
Apple 文档说“此外,iOS 会自动将您的 iOS 应用程序首选项的只读副本转发到 Apple Watch。您的 WatchKit 扩展可以使用 NSUserDefaults 对象读取这些首选项...”。 https://developer.apple.com/library/prerelease/watchos/documentation/General/Conceptual/WatchKitProgrammingGuide/SharingData.html#//apple_ref/doc/uid/TP40014969-CH29-SW1
但是我无法读取保存在我的 iPhone 应用程序中的 WatchKit 应用程序中的默认值,我做错了什么吗?
在 WatchKit 应用程序中,我什至可以保存到(仅限 WatchKit)默认值,还是根本不起作用?
iPhone 数据
:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(dataArray, forKey: "DataSaved"
观看 ExtensionDelegate
:
let defaults = NSUserDefaults.standardUserDefaults()
print(defaults.arrayForKey("DataSaved"))
print(defaults.objectForKey("DataSaved"))
arrayForKey
和 objectForKey
用于打印 nil
。
我一定做错了什么,你知道那会是什么吗?
最佳答案
NSUserDefaults
之间的区别
NSUserDefaults
是任何设备上的内存单元,因此在 iOS 和 watchOS 以及 tvOS 等中完全不同。
例如,如果您运行的代码在 iOS 上将名为“key1”的新 key 添加到 NSUserDefaults
(假设您使用的是 NSUserDefaults.standardUserDefaults()
),当您请求在 watchOS 上读取其数据时,它会为您提供一个空字典。
那是因为这是第一次,您将词典仅存储在 iOS App Target 中,而不是存储在两个设备之间的共享空间中。当 WatchKit 扩展想要使用 NSUserDefaults
时,它会读取保存在 WatchKit Target 中的(空)字典,而不是 iOS Target 中的(填充)字典。
共享数据
有一些在 watchOS 和 iOS 之间共享字典的方法:
1- 使用 watchOS 2 中的 WatchConnectivity
框架,您可以在两个目标之间传递数据。您可以使用 sendMessage
或 WCSession
类中的类似函数来执行此操作。只是不要忘记将 WCSessionDelegate
添加到您的 InterfaceController
(在 watchOS 中)或 ViewController
(在 iOS 中)类和应用程序委托(delegate)能够从 WatchConnectivity
接收数据。
2- 使用在线/云存储,您可以从那里的 iOS 应用程序上传词典,然后将其下载到 watchOS 应用程序。然而,这需要互联网连接,并且在很多情况下并不适用,例如,如果您的应用程序不需要连接到互联网来执行其他任务,而您强制用户连接到互联网只是为了同步一个两个目标之间的简单字典。
3- 使用应用程序组(如果您使用的是 watchOS 1),我没有对其进行更多描述,因为它已经过时并且您可能不希望只为 watchOS 1 制作您的应用程序。
结论
1- NSUserDefaults
分别在 watchOS 和 iOS 中返回两个不同的字典。
2- 要在 watchOS 和 iOS 之间共享数据,您可以使用 WatchConnectivity
、Internet(不推荐)和 App Groups(在 watchOS 1 中)。
更多资源
有关 WatchConnectivity
的更多详细信息,您的问题的现代答案,您应该查看 Apple Developer Portal 中的 Apple 文档.
您还应该看到 this WWDC session谈论 watchOS 2 中包含的这个伟大的框架。
关于ios - 在 watchOS 2 中读取 NSUserDefaults(我知道 App Groups 不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36050090/
我想编写一个 linq 表达式,该表达式将返回不包含特定值的 ID。例如,我想返回所有不具有 Value = 30 的不同 ID。 ID, Value 1, 10 1, 20 1, 30 2,
我正在尝试使用 Regexp 匹配 Nmap 命令的输出。可以有两种不同的格式。 第一种格式(当 nmap 可以找到主机名时) Nmap scan report for 2u4n32t-n4 (192
我正在 Visual Studio 2012 上使用 C# 开发一个软件。我使用 MySQL Connector 6.9.1 进行 MySQL 连接。我的软件在我的操作系统(Win8 x64)上运行顺
在 Django 中(使用 django.contrib.auth 时)我可以添加一个 Group到另一个 Group ?即一个Group成为另一个成员(member) Group ? 如果是这样,我
我试图通过使用动态组参数对数据进行分组来循环。 我们可以在循环的 WHERE 条件上使用动态查询,但我不知道是否可以在组条件中使用动态字符串。 以下是用户决定按哪个字段分组,然后根据决定放置其他逻辑的
我有这样的字符串 s = 'MR1|L2-S1x' 模式总是相同的:一个或两个字符,在 [|.+:x-] 中可选地后跟一个数字和一个分隔符。此模式可以重复 6 次。 所以匹配模式很明确。 p = r'
我有一个带有时间戳字段“bar”的表“foo”。如何仅获取查询的最旧时间戳,例如: SELECT foo.bar from foo?我尝试执行以下操作: SELECT MIN(foo.bar) fro
在我的 Django 项目中,我有一个 user_manage 应用程序。 我在 user_manage 应用的 model.py 中创建了一个名为 UserManage 的模型: from djan
所以我有这样的输入: 还有一个模板指令,例如: 看来我只获得了 foo 和 bar 的组。 (为什么?我预计我可能会得到第三组 current-group-key() = '')。
我正在尝试扩展 django.contrib.auth 并遇到将用户添加到组中的情况,这可以通过两种方式完成。我只是想知道为什么会这样,以及其中一种相对于另一种的优势是什么。 最佳答案 他们做完全相同
我使用的是旧的 PHP 脚本,并且此查询有错误。由于我没有使用 mysql 的经验,因此无法修复它。 "SELECT COUNT(p.postid) AS pid, p.*, t.* FROM ".T
我有几行 Objective-C 代码,例如: ABAddressBookRef addressBook; CFErrorRef error = NULL; addressBook = ABAddre
我正在使用 MariaDB IMDB 电影数据集,我试图解决以下问题。电影表包含 id、名称、排名和年份列 A decade is a sequence of 10 consecutive years
让我从数据开始,以便更好地描述我的需求。我有一个名为 SUPERMARKET 的表,其中包含以下字段: Field 1: StoreID Field 2: ProductCategory Field
你好我有这个查询: SELECT DISTINCT a.id, a.runcd, (SELECT SUM(b.CALVAL) FROM GRS b WHERE b.PCode=11000 AND a.
我想在 xquery 中使用 Group By。有人可以告诉我如何在 Marklogic 中使用 Group By 吗? 最佳答案 或者,您可以使用 xdmp:xslt-invoke 调用 XSLT或
因此,当通过 from sequelize 请求组时,如下所示: return models.WorkingCalendar .findAll({
我希望我解释正确。 我有 2 个表,有 第一个表(table1) +------------+------+-------+-------+ | Date | Item | Block |
我的表 MYTABLE 有 2 列:A 和 B 我有以下代码片段: SELECT MYTABLE.A FROM MYTABLE HAVING SUM(MYTABLE.B) > 100
我有一个简单的行分组查询,需要 0.0045 秒。 300.000 行 从表 GROUP BY cid 中选择 cid 当我添加 MAX() 进行查询时,需要 0.65 秒才能返回。 从表 GROUP
我是一名优秀的程序员,十分优秀!