Mi aplicación de reloj tiene una interfaz basada en páginas en la que realmente no sé qué InterfaceController está actualmente en la pantalla (podría ser 1 de 4), sin embargo, necesito mostrar una alerta sin importar en qué pantalla esté la aplicación. ¿Cómo puedo presentar una alerta si no sé necesariamente qué InterfaceController está "actual"? El siguiente código solo se ejecutará si el usuario ha navegado a este InterfaceController. Si el usuario no está en esa página, veo este error en la consola 2019-09-22 15:42:01.597663-0400 Watch Extension[501:526217] Warning: Attempt to present <PUICAlertSheetController: 0x18158c00> on <SPInterfaceViewController: 0x1795e800> whose view is not in the window hierarchy!

extension WorkoutControlsInterfaceController: WorkoutEndedDelegate {
    func timerEndedCheckToSeeIfWorkoutEnded(_ manager: WorkoutManager) {
        let endWorkoutAction = WKAlertAction(title: "End Workout", style: .default, handler: {
            print("User has selected to end the workout")
            self.workoutManager?.stopWorkout()

        })
        let cancelAction = WKAlertAction(title: "Cancel", style: .cancel, handler: {

        })
        self.becomeCurrentPage()
        self.presentAlert(withTitle: "Workout Ended?", message: "It looks like your workout may have ended?", preferredStyle: .alert, actions: [endWorkoutAction, cancelAction])
    }


}
0
GarySabo 22 sep. 2019 a las 22:40

1 respuesta

La mejor respuesta

Puede utilizar la propiedad visibileInterfaceController del objeto WKExtesion compartido;

extension WorkoutControlsInterfaceController: WorkoutEndedDelegate {
    func timerEndedCheckToSeeIfWorkoutEnded(_ manager: WorkoutManager) {
        let endWorkoutAction = WKAlertAction(title: "End Workout", style: .default, handler: {
            print("User has selected to end the workout")
            self.workoutManager?.stopWorkout()

        })
        let cancelAction = WKAlertAction(title: "Cancel", style: .cancel, handler: {

        })

        WKExtension.shared().visibleInterfaceController?.presentAlert(withTitle: "Workout Ended?", message: "It looks like your workout may have ended?", preferredStyle: .alert, actions: [endWorkoutAction, cancelAction])
    }


}
1
Paulw11 22 sep. 2019 a las 20:01