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)
}
}
스택 오버플로에 오신 것을 환영합니다! 현재 코드를 알려주십시오. – the4kman
에 watchKit 코드가 추가되었습니다. 덕분에 –
백그라운드 대기열에서 WCSession 콜백이 발생하지만 일반적으로 메인 대기열에서 UI 요소를 업데이트해야합니다. 메인 대기열로 파견하여 문제를 해결하는 데 도움이되는지 확인하는 것이 좋습니다. – ccjensen