Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在watchOS 2中读取NSUserDefaults(我知道应用程序组不起作用)_Ios_Swift_Nsuserdefaults_Watchkit_Watchos 2 - Fatal编程技术网

Ios 在watchOS 2中读取NSUserDefaults(我知道应用程序组不起作用)

Ios 在watchOS 2中读取NSUserDefaults(我知道应用程序组不起作用),ios,swift,nsuserdefaults,watchkit,watchos-2,Ios,Swift,Nsuserdefaults,Watchkit,Watchos 2,Apple文档中说,“此外,iOS会自动将iOS应用程序首选项的只读副本转发给Apple Watch。您的WatchKit扩展可以使用NSUserDefaults对象读取这些首选项…” 但我无法读取iPhone应用程序中保存的WatchKit应用程序中的默认值,我做错了什么吗 在WatchKit应用程序中,我甚至可以保存为(仅限WatchKit)默认值,还是根本不起作用 iPhone数据: let defaults = NSUserDefaults.standardUserDefaults()

Apple文档中说,“此外,iOS会自动将iOS应用程序首选项的只读副本转发给Apple Watch。您的WatchKit扩展可以使用NSUserDefaults对象读取这些首选项…”

但我无法读取iPhone应用程序中保存的WatchKit应用程序中的默认值,我做错了什么吗

在WatchKit应用程序中,我甚至可以保存为(仅限WatchKit)默认值,还是根本不起作用

iPhone
数据

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(dataArray, forKey: "DataSaved"
查看ExtensionLegate:

let defaults = NSUserDefaults.standardUserDefaults()
print(defaults.arrayForKey("DataSaved"))
print(defaults.objectForKey("DataSaved"))
arrayworky
objectForKey
用于打印
nil


我一定是做错了什么事,你知道会是什么吗?

对不起。您无法在WatchKit应用程序中读取任何默认值,因为从watchOS2它有自己的内存可供使用。因此,您无法在watchOS中访问iOS的NSUserDefaults中的值


您必须使用watch Connectivity来共享watch OS2的数据。

要清楚,
NSUserDefaults.standardUserDefaults()
在使用手表和手机通话时会为您提供两个不同的字典

有关WatchConnectivity的信息,请签出

苹果文档:


不同的
NSUserDefaults

NSUserDefaults
是任何设备上的一个内存单元,因此它在iOS和watchOS以及tvOS中完全不同

例如,如果您运行一个代码,将名为“key1”的新键添加到iOS上的
NSUserDefaults
(假设您使用的是
NSUserDefaults.standardUserDefaults()
),当您请求在watchOS上读取其数据时,它会给您一个空字典

这是因为这是第一次,您仅将字典存储在iOS应用程序Target中,而不是存储在两台设备之间的共享空间中。当WatchKit扩展想要使用
NSUserDefaults
时,它读取保存在WatchKit目标中的(空)字典,而不是iOS目标中的(已填充)字典

共享数据

在watchOS和iOS之间共享字典有几种方式:

1-使用watchOS 2中的
WatchConnectivity
框架,您可以在两个目标之间传递数据。您可以使用
sendMessage
WCSession
类中的类似函数来执行此操作。不要忘记将
WCSessionDelegate
添加到
InterfaceController
(在watchOS中)或
ViewController
(在iOS中)类和应用程序委托中,以便应用程序能够从
WatchConnectivity
接收数据

2-使用在线/云存储,您可以从iOS应用程序上传字典,然后下载到watchOS应用程序。但是,这需要Internet连接,并且在许多情况下不适用,例如,如果您的应用程序不需要连接到Internet来执行其他任务,并且您强制用户连接到Internet只是为了在两个目标之间同步一个简单的字典

3-使用应用程序组(如果您使用的是watchOS 1),我不会详细描述,因为它已经过时,您可能不想让您的应用程序只用于watchOS 1

结论

1-
NSUserDefaults
分别在watchOS和iOS中返回两个不同的字典

2-要在watchOS和iOS之间共享数据,您可以使用
WatchConnectivity
、Internet(不推荐)和应用程序组(在watchOS 1中)

更多资源

有关
WatchConnectivity
的更多详细信息,这是您问题的现代答案,您应该查看中的苹果文档


此外,您还应该了解watchOS 2中包含的这个伟大的框架。

Ns defaults.standard是该目标特有的。通过使用它,您可以访问该目标中的数据,在您的情况下,您需要访问另一个目标中的数据,所以请注意,您需要做两件事,一件是 1.使用应用程序组 2.不要使用用户默认值。标准使用用户默认值(suiteName:“group.yourgroup”) 存储和访问数据
参考链接可能有用。

哦,哇,我不知道。你有没有苹果文档引用过它,或者其他引用过它的东西,这样我就可以开始思考它是如何工作的了?我在那里没有看到任何关于NSUserDefaults的内容?Watch Connectivity不会让你访问NSUserDefaults。但是,在手机应用程序中,您可以使用WatchConnectivity向您的watch应用程序发送默认设置的副本。watch应用程序可以使用接收到的对象,如果需要进行更改,请将更改发送回手机应用程序。然后,手机应用程序可以将这些更改写入它的NSUserDefaults。@JoshBuhler我遇到的问题是,我将在iPhone上保存并反对NSUserDefaults,然后无法在手表上读取该对象。当我尝试时,我无法做到“手表应用程序可以使用接收到的对象”,但我希望能够做到这一点do@victorpulak您是否尝试过使用WCSession和sendMessage:replyHandler:errorHandler消息从手机向手表发送数据?当你这么做时会发生什么?我想你引用了watch os的预发布版本,所以现在可能不准确了。@NicolasS啊,我明白了。你知道有没有更新过的文档吗,因为我看不到任何关于NSUserDefaults的更新过的文档。谢谢“NSUserDefaults分别在watchOS和iOS中返回两个不同的字典。”这是我需要的部分,谢谢大家。我很高兴我能解决你的问题。这个答案是缺乏信息。在:
此外,iOS会自动将iOS应用程序首选项的只读副本转发给Apple Watch。您的WatchKit扩展可以使用NSUserDefaults对象读取这些首选项,但它无法直接更改默认数据库
@transang,您是否确实看到过这种行为?我也看到了那个医生,但我看不到任何证据