Я пишу приложение, которое позволяет мне записывать свои удары в гольф и сохранять их, чтобы я мог просматривать результаты на iPhone. Проблема заключается в том, что хотя приложение получает сообщения после запуска и открытия контроллеров вторичного представления, оно прекращает прослушивание сообщений после закрытия любого контроллера вторичного представления. Если я затем переключусь на дополнительный контроллер представления, он будет прослушивать сообщения, пока я снова не закрою его. Я не знаю, почему корневой контроллер представления будет слушать только до тех пор, пока не будет открыт вторичный контроллер представления.
Я использую sendMessage
и соответствующую ему функцию приемника для передачи количества ударов между устройствами. Каждый контроллер представления содержит функцию получения сообщения.
Рассматриваемый код выглядит следующим образом:
import UIKit // or WatchKit on Apple watch
import WatchConnectivity
class ViewController: UIViewController, WCSessionDelegate {
var session: WCSession!
let userData = NSUserDefaults.standardUserDefaults()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
ScrollHoles.contentSize = CGSize(width: 360,height: 1090)
if (WCSession.isSupported()){
self.session = WCSession.defaultSession()
self.session.delegate = self
self.session.activateSession()
userData.synchronize()
}
}
Функция отправки сообщения...
// Save Data From Strokes To standatdUserDefaults.
@IBAction func SaveButton(sender: AnyObject) {
let hole1Score = Strokes1.text;
userData.setObject(hole1Score, forKey: "hole1Strokes")
userData.synchronize()
session.sendMessage(["score1A": hole1Score!], replyHandler: nil, errorHandler: nil) // score1A becomes score1B on Apple watch
}
и функция получения сообщения...
// Recieve Data from Apple Watch And Save It To standardUserDefaults (e.g. # of strokes).
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
let hole1Msg = message["score1B"] as? String // score1B becomes score1A on apple watch
let hole2Msg = message["score2B"] as? String
if (hole1Msg != nil){
userData.setObject(hole1Msg, forKey: "hole1Strokes")
}
if (hole2Msg != nil){
userData.setObject(hole2Msg, forKey: "hole2Strokes")
}
Константы и оператор if продолжаются для всех 18 отверстий.
Я использую следующее, чтобы отклонить контроллеры вторичного представления.
@IBAction func backButton(sender: AnyObject) {
self.dismissViewControllerAnimated(true, completion: {});
}