在启动 phone 应用程序之前,在 Watch 上从 iPhone 获取字典 - WC
Get a dictionary from iPhone on Watch prior to launching the phone app - WC
我在尝试同步 iPhone 应用和 WatchKit 应用时遇到了问题。
问题是 - 我的 WatchKit 应用程序 tableView
附加了来自 iPhone.
的数据数组
我正在使用来自 Watch Connectivity 框架的交互式消息传递
正在建立会话
if(WCSession.isSupported()){
self.session = WCSession.defaultSession()
self.session.delegate = self
self.session.activateSession()
}
正在向 WatchKit 应用程序发送消息
do {
let dataDict = ["data": dictionary1]
try WCSession.defaultSession().updateApplicationContext(dataDict)
}
catch {
print(error)
}
这就是我在手表上收到消息的方式
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
dispatch_async(dispatch_get_main_queue()) { () -> Void in
if let retrievedArray1 = applicationContext["data"] as? [Int : Bool] {
self.arrayOnWatch = retrievedArray1
}
}}
它运行良好,但有一个例外 - 我无法获取数据数组,直到我在 iPhone 上启动应用程序,这对我来说不是解决方案。
关于如何在不打开实际 phone 应用程序的情况下传输和接收消息的任何想法?
谢谢。
使用应用程序上下文不适用于您的情况,因为它需要 iPhone 应用程序主动设置应用程序上下文。
您可以使用 WatchKit 的 sendMessage
让手表向 iPhone 应用程序请求数据。
在您的 ExtensionDelegate 激活连接后向 iPhone 应用程序发送消息:
if WCSession.defaultSession().reachable {
let messageDict = ["message": "hello iPhone!"]
WCSession.defaultSession().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
print(replyDict)
}, errorHandler: { (error) -> Void in
print(error)
}
}
如果 iPhone 应用不是 运行,这将在后台唤醒您的 iPhone 应用。
在您的 iPhone 应用程序的 AppDelegate 中实现相应的 WCSessionDelegate 方法(在 didFinishLauncingWithOptions:
激活会话后
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
replyHandler(["message": "Hello Watch!"])
}
只需发送您的数据而不是 "Hello Watch!",即使 iPhone 应用不是 运行,您的手表也会有数据。
我在尝试同步 iPhone 应用和 WatchKit 应用时遇到了问题。
问题是 - 我的 WatchKit 应用程序 tableView
附加了来自 iPhone.
我正在使用来自 Watch Connectivity 框架的交互式消息传递
正在建立会话
if(WCSession.isSupported()){
self.session = WCSession.defaultSession()
self.session.delegate = self
self.session.activateSession()
}
正在向 WatchKit 应用程序发送消息
do {
let dataDict = ["data": dictionary1]
try WCSession.defaultSession().updateApplicationContext(dataDict)
}
catch {
print(error)
}
这就是我在手表上收到消息的方式
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
dispatch_async(dispatch_get_main_queue()) { () -> Void in
if let retrievedArray1 = applicationContext["data"] as? [Int : Bool] {
self.arrayOnWatch = retrievedArray1
}
}}
它运行良好,但有一个例外 - 我无法获取数据数组,直到我在 iPhone 上启动应用程序,这对我来说不是解决方案。
关于如何在不打开实际 phone 应用程序的情况下传输和接收消息的任何想法?
谢谢。
使用应用程序上下文不适用于您的情况,因为它需要 iPhone 应用程序主动设置应用程序上下文。
您可以使用 WatchKit 的 sendMessage
让手表向 iPhone 应用程序请求数据。
在您的 ExtensionDelegate 激活连接后向 iPhone 应用程序发送消息:
if WCSession.defaultSession().reachable {
let messageDict = ["message": "hello iPhone!"]
WCSession.defaultSession().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
print(replyDict)
}, errorHandler: { (error) -> Void in
print(error)
}
}
如果 iPhone 应用不是 运行,这将在后台唤醒您的 iPhone 应用。
在您的 iPhone 应用程序的 AppDelegate 中实现相应的 WCSessionDelegate 方法(在 didFinishLauncingWithOptions:
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
replyHandler(["message": "Hello Watch!"])
}
只需发送您的数据而不是 "Hello Watch!",即使 iPhone 应用不是 运行,您的手表也会有数据。