2017-12-29 10 views
1

iPhone에서 시계에 변수를 보내려고했습니다. watchConnectivity를 사용하여 전송했지만 watch app에서 picker를 통해 전달 된 새 변수로 업데이트 할 수 없습니다.watchConnectivity에서 변수를 보내고 있지만 업데이트 할 시계 앱에서 선택기를 가져올 수 없습니다.

여기 시계 응용 프로그램에 대한 코드입니다 :

import WatchKit 
import Foundation 
import WatchConnectivity 

var bigDict = ["":""] 

class InterfaceController: WKInterfaceController, WCSessionDelegate { 

    lazy var keys = Array(bigDict.keys) 
    lazy var values = Array(bigDict.values) 
    var pickerItems: [WKPickerItem] = [] 

    @IBOutlet var pickerW: WKInterfacePicker! 

    @IBAction func pickerDidChange(_ value: Int) { 

    } 

    @IBAction func updateButton() { 
     for item in keys{ 
      let pickerItem = WKPickerItem() 
      pickerItem.title = item 
      pickerItem.caption = bigDict[item] 
      pickerItems += [pickerItem] 
     } 
     pickerW.setItems(pickerItems) 
    } 

    //func refreshPickerItems() { 
     //for item in keys{ 
      //let pickerItem = WKPickerItem() 
      //pickerItem.title = item 
      //pickerItem.caption = bigDict[item] 
      //pickerItems += [pickerItem] 
     // } 

     //pickerW.setItems(pickerItems) 

    // } 


    override func awake(withContext context: Any?) { 
     super.awake(withContext: context) 
     // Configure interface objects here. 
     //refreshPickerItems() 
    } 

    override func willActivate() { 
     // This method is called when watch view controller is about to be visible to user 
     super.willActivate() 
     if WCSession.isSupported() { 
      let session = WCSession.default 
      session.delegate = self 
      session.activate() 
     } 
    } 

    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { 

    } 

    func session(_ session: WCSession, didReceiveMessage message: [String : Any]) { 

     print(message) 
     bigDict = message as! [String : String] 
      print(bigDict) 
    } 
} 
+0

스택 오버플로에 오신 것을 환영합니다! 현재 코드를 알려주십시오. – the4kman

+0

에 watchKit 코드가 추가되었습니다. 덕분에 –

+0

백그라운드 대기열에서 WCSession 콜백이 발생하지만 일반적으로 메인 대기열에서 UI 요소를 업데이트해야합니다. 메인 대기열로 파견하여 문제를 해결하는 데 도움이되는지 확인하는 것이 좋습니다. – ccjensen

답변

0

당신이 전화를 안 "UpdateButton의()"때 데이터 수신?

func session(_ session: WCSession, didReceiveMessage message: [String : Any]) { 

    print(message) 
    bigDict = message as! [String : String] 
    updateButton() 
    print(bigDict) 


} 
관련 문제