我正在努力学习如何为Apple Watch开发watchapps,有一件事对我来说似乎有点困难:如何在watchapp和复杂控制器之间共享数据?
我在网上看到的大多数例子都遵循以下顺序:
1 - 在ExtensionDelegate上下载数据,并在InterfaceController上使用它;
2 - 获取ComplicationController以从ExtensionDelegate
获取数据3 - 在ExtensionDelegate上添加后台任务,以便下载将由InterfaceController和ComplicationController使用的更新数据,同时更新两者。
所以我的数据在ExtensionDelegate的集合中。我想知道:
1 - 在启动应用程序时,谁应该首先让我的ExtensionController下载数据?我的ComplicationController或我的InterfaceController?我问这个是因为在xcode上有每个这样的模拟器,所以有时我不知道在启动应用程序时首先调用它。复杂功能是否仅在用户打开应用程序后才开始其生命周期,从而强制首次加载数据,还是在安装应用程序后启动?或者应该在ExtensionDelegate上添加一个标志来标记如果没有下载数据,是否有数据被下载,有数据可用(即,集合不为空),因此ComplicationController或InterfaceController可以触发第一次数据下载? / p>
2 - 虽然我的后台下载任务有效,但我觉得在几个小时内,我的应用程序在打开时必须重新加载,就像之前没有打开一样,从而触发新的数据下载。它上面的数据与已经下载并由ComplicationController显示的数据不同。解决这个问题的好策略是什么?关于我应该检查什么的任何指示?
答案 0 :(得分:0)
我不确定我是否理解你的问题。无论如何,我通过以下方式从iPhone到手表的数据传输:
首先假设iPhone应用程序和手表扩展程序已安装,iPhone应用程序尚未启动,但手表扩展程序在后台运行,因此只要iPhone应用程序运行,它就可以与iPhone通信。登记/> 进一步假设,手表显示的是具有应用程序复杂功能的表盘。
启动iPhone应用程序后,它会首先使用transferCurrentComplicationUserInfo(_:)
将复杂数据发送到手表。因此,表盘显示并发症数据
随后,iPhone使用sendMessage(_:replyHandler:errorHandler:)
发送消息。此消息告诉手表扩展,iPhone将很快发送数据。由于发送数据可能需要更长时间,因此初始消息用于在手表上显示提示从iPhone 加载数据。
随后,我使用updateApplicationContext(_:)
发送数据。
第二种情况是iPhone应用程序正在运行,但手表扩展程序尚未运行
现在,只要启动了手表扩展程序,InterfaceController
就会使用sendMessage(_:replyHandler:errorHandler:)
立即向iPhone发送需要数据的消息。当收到此消息时,将执行与上述相同的序列:发送并发数据,发送消息以便很快启动数据传输,并启动数据传输。
这没有问题。
关于你的问题:
在我的情况下,InterfaceController
一旦激活就会启动转移
但是,当手表扩展程序安装但尚未启动时,我的表盘会显示我的(默认)并发症数据。这意味着即使手表扩展程序和iPhone应用程序都没有运行,ComplicationController
实际上仍在运行。因此,可以通过这种方式开始初始数据传输
我没有你在第二个问题中提到的那个问题,所以我不能说什么。