WKWatchConnectivityRefreshBackgroundTask 示例
WKWatchConnectivityRefreshBackgroundTask example
我想使用 WKWatchConnectivityRefreshBackgroundTask
将数据从我的 iOS 应用程序传递到我的 watchOS 3 应用程序
如何在我的 watchOS 应用程序中设置代码来处理正在传输的数据?
例如,过去我使用此 iOS 代码从 iOS 应用程序发送消息,如果没有连接,则发送上下文:
func sendTable()
{
let tableInfo: WatchWorkout = PhoneData().buildWatchTableData(Foundation.Date().refDays())
let archivedTable: Data = NSKeyedArchiver.archivedData(withRootObject: tableInfo)
if validSession
{
sendMessage([Keys.UpdateType : PhoneUpdateType.TableInfo.rawValue, Keys.Workout: archivedTable])
}
else
{
do
{
try updateApplicationContext([Keys.UpdateType : PhoneUpdateType.TableInfo.rawValue, Keys.Workout: archivedTable])
}
catch
{
print("Phone Session - error sending info: \(error)")
}
}
}
func sendMessage(_ message: [String : AnyObject], replyHandler: (([String : AnyObject]) -> Void)? = nil, errorHandler: ((NSError) -> Void)? = nil)
{
print("Phone Session - phone sent message")
session!.sendMessage(message,
replyHandler:
nil,
errorHandler:
{
(error) -> Void in
print("Phone Session - Error Message during transfer to Watch: \(error)")
}
)
}
func updateApplicationContext(_ applicationContext: [String : AnyObject]) throws
{
print("Phone Session - phone sent context")
if ((session) != nil)
{
do
{
try session!.updateApplicationContext(applicationContext)
}
catch let error
{
print("Phone Session - OPPS something wrong - context send failed")
throw error
}
}
}
我不确定如何将此数据的接收编码为手表上的后台任务。
有人可以提供一些示例代码或 post link 吗?唯一的 Apple 示例代码不是很有帮助:
https://developer.apple.com/library/prerelease/content/samplecode/WatchBackgroundRefresh/Introduction/Intro.html
谢谢
格雷格
Quick Switch 示例代码随 watchOS 3 的发布一起更新,以包含处理 WatchConnectivity 后台刷新任务的示例。
@ccjensen 快速切换示例代码不起作用,是吗?
它会在我的 iPhone6 iOS10.0 beta3 上崩溃。我已经在上周五发送了反馈。
在我的案例中,调用
updateApplicationContext(_:)
transferUserInfo(_:)
transferCurrentComplicationUserInfo(_:)
transferFile(_:metadata:)
iPhone 侧从不触发 handle(_:)
侦听器。
我想使用 WKWatchConnectivityRefreshBackgroundTask
将数据从我的 iOS 应用程序传递到我的 watchOS 3 应用程序如何在我的 watchOS 应用程序中设置代码来处理正在传输的数据?
例如,过去我使用此 iOS 代码从 iOS 应用程序发送消息,如果没有连接,则发送上下文:
func sendTable()
{
let tableInfo: WatchWorkout = PhoneData().buildWatchTableData(Foundation.Date().refDays())
let archivedTable: Data = NSKeyedArchiver.archivedData(withRootObject: tableInfo)
if validSession
{
sendMessage([Keys.UpdateType : PhoneUpdateType.TableInfo.rawValue, Keys.Workout: archivedTable])
}
else
{
do
{
try updateApplicationContext([Keys.UpdateType : PhoneUpdateType.TableInfo.rawValue, Keys.Workout: archivedTable])
}
catch
{
print("Phone Session - error sending info: \(error)")
}
}
}
func sendMessage(_ message: [String : AnyObject], replyHandler: (([String : AnyObject]) -> Void)? = nil, errorHandler: ((NSError) -> Void)? = nil)
{
print("Phone Session - phone sent message")
session!.sendMessage(message,
replyHandler:
nil,
errorHandler:
{
(error) -> Void in
print("Phone Session - Error Message during transfer to Watch: \(error)")
}
)
}
func updateApplicationContext(_ applicationContext: [String : AnyObject]) throws
{
print("Phone Session - phone sent context")
if ((session) != nil)
{
do
{
try session!.updateApplicationContext(applicationContext)
}
catch let error
{
print("Phone Session - OPPS something wrong - context send failed")
throw error
}
}
}
我不确定如何将此数据的接收编码为手表上的后台任务。
有人可以提供一些示例代码或 post link 吗?唯一的 Apple 示例代码不是很有帮助: https://developer.apple.com/library/prerelease/content/samplecode/WatchBackgroundRefresh/Introduction/Intro.html
谢谢
格雷格
Quick Switch 示例代码随 watchOS 3 的发布一起更新,以包含处理 WatchConnectivity 后台刷新任务的示例。
@ccjensen 快速切换示例代码不起作用,是吗? 它会在我的 iPhone6 iOS10.0 beta3 上崩溃。我已经在上周五发送了反馈。
在我的案例中,调用
updateApplicationContext(_:)
transferUserInfo(_:)
transferCurrentComplicationUserInfo(_:)
transferFile(_:metadata:)
iPhone 侧从不触发 handle(_:)
侦听器。