我在尝试同步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)
}
这就是我在Watch上收到消息的方式
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
}
}}
它有一个例外 - 我无法获取数据阵列UNTIL我在iPhone上启动应用程序,这在我的情况下不是解决方案。
有关如何在不打开实际手机应用程序的情况下传输和接收消息的任何想法?
谢谢。
答案 0 :(得分:2)
使用应用程序上下文不适合您的情况,因为它需要iPhone应用程序来主动设置应用程序上下文。
您可以使用WatchKit List<MyClass<? extends SomeOtherClass>>
让手表向iPhone应用询问数据。
激活连接后,在 ExtensionDelegate 中向iPhone应用发送消息:
sendMessage
如果iPhone应用未运行,这将在后台唤醒您的iPhone应用程序。
在您的iPhone应用 AppDelegate 中实施相应的WCSessionDelegate方法(在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)
}
}
didFinishLauncingWithOptions:
只需发送您的数据而不是&#34; Hello Watch!&#34;即使iPhone应用程序没有运行,您的手表也会拥有数据。