2017-12-29 13 views
1

Ich habe versucht, eine Variable vom iPhone an die Uhr zu senden. Es ist mir gelungen, es mit watchConnectivity zu senden, aber ich kann den Picker in der Watch-App nicht mit der neuen Variable, die ich gesendet habe, aktualisieren.Senden einer Variablen mit watchConnectivity, aber keine Aktualisierung der Auswahl in der Überwachungs-App möglich

Hier ist der Code für die Uhr App:

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

Willkommen bei Stack Overflow! Bitte zeigen Sie uns Ihren aktuellen Code. – the4kman

+0

hat den watchKit-Code hinzugefügt. danke –

+0

WCSession-Callbacks treten in einer Hintergrundwarteschlange auf, während Sie normalerweise sicherstellen möchten, dass Sie die UI-Elemente in der Hauptwarteschlange aktualisieren. Vielleicht lohnt es sich zu versuchen, in die Hauptwarteschlange zu gelangen und zu sehen, ob das zur Lösung Ihres Problems beiträgt. – ccjensen

Antwort

0

Sollten Sie nicht "Updatebutton()" aufrufen, wenn erhalten Sie die Daten?

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

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


} 
Verwandte Themen