Xcode: остановленный сеанс тренировки не может быть перезапущен - PullRequest
1 голос
/ 21 июня 2019

Я создаю приложение, которое запускает и останавливает сеанс тренировки в режиме наблюдения, а данные о состоянии здоровья хранятся в HealthKit, к которому можно получить доступ из приложения iPhone. В этом случае всякий раз, когда я останавливаюсь и затем начинаю сеанс тренировки, он печатает это сообщение «Остановленный сеанс тренировки не может быть перезапущен». Тем не менее, он работает нормально, когда я запускаю и останавливаю приложение в первый раз, и при второй возможности выводит сообщение об ошибке.

override func awake(withContext context: Any?) {
    super.awake(withContext: context)
    processApplicationContext()
    session.delegate = self
    session.activate()
 }

override func willActivate() {
    super.willActivate()
}

override func didDeactivate() {
    // This method is called when watch view controller is no longer visible
    super.didDeactivate()
}

@IBAction func btnPress() {
    if isWorkoutInProgress{
        endworkoutsession()
    } else {
        startworkoutsession()
    }
    isWorkoutInProgress = !isWorkoutInProgress
}//btnpress

func createWorkoutsession(){
    print("Creating a workout session!!!")

    let config = HKWorkoutConfiguration()
    config.activityType = .other
    config.locationType = .unknown

    do{
        workoutsession = try HKWorkoutSession(configuration: config)
        workoutsession?.delegate = self
    }
    catch{ print("an error occurred!!!!!!!")}
}
func startworkoutsession(){

    //  print("Starting Workout Session")
    if workoutsession == nil {
        createWorkoutsession()  }
    guard let session = workoutsession else {
        print("Can't start a workout without a workout session.")
        return
    }
    healthstore.start(session)
    wkstartdate = Date()


    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(savemockrate), userInfo: nil, repeats: true)
}



func endworkoutsession(){
    // print("Ending Workout session")
    guard let session = workoutsession else{
        print("Can't end a workout that hasn't been started.")
        return
    }
    self.timer?.invalidate()
    healthstore.end(session)
    //savemockrate()
}

@objc func savemockrate(){
    print("mock heart rate from workout")
    let heartRateType = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!
    let heartRateQuantity = HKQuantity(unit: HKUnit(from: "count/min"),
                                       doubleValue: Double(arc4random_uniform(80) + 100))
    let heartSample = HKQuantitySample(type: heartRateType,
                                       quantity: heartRateQuantity, start: NSDate() as Date as Date, end: NSDate() as Date)



    healthstore.save(heartSample, withCompletion: { (success, error) -> Void in
        if let error = error {
            print("Error saving heart sample: \(error.localizedDescription)")
        }
    })

}
func processApplicationContext(){
    if let iPhoneContext = session.receivedApplicationContext as? [String:Bool]{
        if iPhoneContext["switchStatus"] == true {
            startworkoutsession()
            displaylbl.setText("Switch On")
        }else {
            endworkoutsession()
            self.timer?.invalidate()
            displaylbl.setText("Switch Off")
        }
    }
}

}

с использованием Xcode 9, swift 4. У меня вопрос: как я могу остановить и снова начать тренировку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...