通过sendMessage唤醒父IOS应用程序不工作
我的目标是通过以下步骤更新时钟套件:通过sendMessage唤醒父IOS应用程序不工作,ios,swift2,apple-watch,sendmessage,watchconnectivity,Ios,Swift2,Apple Watch,Sendmessage,Watchconnectivity,我的目标是通过以下步骤更新时钟套件: 复杂性触发ExtensionLegate向AppDelegate发送消息,以唤醒父IOS应用程序 iOS应用程序将下载/XML解析数据 AppDelegate将通过TransferCurrentCompliationUserInfo将数据传输到ExtensionDelegate ExtensionDelegate传递给控制器 当iOS应用程序在前台运行/处于活动状态时,所有这些都可以工作。应用程序未启动时,它不工作 有什么需要设置的吗?(已经在info.pl
func sendMessage(){
let session = WCSession.defaultSession()
let applicationData = ["wake":"wakeUp"]
session.sendMessage(applicationData, replyHandler: {replyMessage in
}, errorHandler: {(error ) -> Void in
print("no reply message from phone")
})
}
代表:
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
let receivedMessage = message["wake"] as! String
if receivedMessage == "wakeUp" {
let applicationDict = ["wake": "nowAwake"]
replyHandler(applicationDict as [String : String])
}
self.loadData()
}
func loadData(){
... code to load data
dispatch_async(dispatch_get_main_queue()) { () -> Void in
let dictionaryComplication = [...]
if WCSession.isSupported() {
let session = WCSession.defaultSession()
if session.watchAppInstalled {
do {
session.transferCurrentComplicationUserInfo(dictionaryComplication)
try session.updateApplicationContext(dictionaryContext)
} catch {
print("ERROR: \(error)")
}
}
}
}
}
确保在ExtensionLegate的
init
方法中激活WCSession,而不是在ApplicationIDFinishLaunching
中激活:
class ExtensionDelegate: NSObject, WKExtensionDelegate {
override init() {
super.init()
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
...
}
ApplicationIDFinishLaunching
仅在用户启动WatchApp时调用,而不是在复杂情况请求新数据时调用。确保在ExtensionLegate的init
方法中激活WCSession,而不是在ApplicationIDFinishLaunching
中:
class ExtensionDelegate: NSObject, WKExtensionDelegate {
override init() {
super.init()
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
...
}
ApplicationIDFinishLaunching
仅在用户启动WatchApp时调用,但在复杂情况请求新数据时不调用。感谢您的回答。我已经在init函数中启动了WCSession(在AppDelegate和ExtensionDelegate中都有)。不幸的是,当呼叫源于复杂情况时,这不会唤醒IOS父应用程序(将为问题添加更多细节)。谢谢您的回复!!请您将代码的相关部分添加到您的答案中,好吗?否则,很难找到问题。谢谢您的回答。我已经在init函数中启动了WCSession(在AppDelegate和ExtensionDelegate中都有)。不幸的是,当呼叫源于复杂问题时,这不会唤醒IOS家长应用程序(将为问题添加更多细节)。感谢您的回答!!您可以将代码的相关部分添加到您的答案中吗?否则很难找到问题。