我正在为iOS和Apple手表编写应用程序,需要在Apple手表和iPhone之间同步数据。
我这样做是为了将数据从iPhone发送到像这里提到的苹果手表:http://telliott.io/2015/08/11/how-to-communicate-between-ios-and-watchos2.html
另一方面,如果我更改我的手表应用程序上的数据并将更新的数据发送到我的iPhone,如果收到消息的ViewController打开,则会发出一个奇怪的警告。当它关闭并从我的手表发送更新的数据时,我的控制台上没有警告,如果我打开ViewController,数据会更新:
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]){
if(WCSession.isSupported()){
self.prefs = Utils().importDataFromSession(prefs, applicationContext: applicationContext)
initializeGUI(true)
}
}
任何人都可以帮我解决这个奇怪的警告吗?
这是我收到消息的方法
if(!isset($_SESSION))
{
session_start();
}
答案 0 :(得分:1)
WCSession标题说:
/** ----------------------------- WCSessionDelegate -----------------------------
* The session calls the delegate methods when content is received and session
* state changes. All delegate methods will be called on the same queue. The
* delegate queue is a non-main serial queue. It is the client's responsibility
* to dispatch to another queue if neccessary.
*/
因此,如果您想更新UI,您需要确保代码在应用程序的主线程上运行;因此,对您的代码进行以下更改,警告将消失:
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]){
if (WCSession.isSupported()) {
self.prefs = Utils().importDataFromSession(prefs, applicationContext: applicationContext)
dispatch_async(dispatch_get_main_queue(), {
initializeGUI(true)
})
}
}