Tengo un proyecto en el que necesito registrar un evento de análisis cada vez que aparece un controlador de vista (registrar el nombre del controlador de vista).

Estaba tratando de evitar ensuciar todas mis clases de View Controller existentes con llamadas al SDK de análisis.

Intenté hacer un AnalyticsViewController y todos mis View Controllers subclasificarían este View Controller, y luego agregué un evento de análisis en el método viewDidLoad de la clase AnalyticsViewController. Pero el problema con este enfoque es que AnalyticsViewController no determina de qué niño View Controller proviene la llamada.

Estoy usando Swift 3.0. Creo que Swift, con sus potentes funciones de lenguaje, debería poder proporcionarme una abstracción de algún tipo.

¿Hay alguna forma de solucionar este problema sin ensuciar todos los controladores de vista?

0
jarora 15 dic. 2016 a las 18:51

2 respuestas

La mejor respuesta

Estabas en el camino correcto. Hacer una clase padre UIViewController es una buena idea.

En el método viewDidLoad, puede agregar esto:

let className = NSStringFromClass(self.classForCoder)

Le dará el nombre del controlador de vista cargado actualmente y luego puede usar ese nombre en su evento para especificar qué controlador de vista se cargó realmente.

Editar: ejemplo agregado. Entonces, el viewDidLoad de sus padres se vería así:

override func viewDidLoad() {
    super.viewDidLoad()

    let className = NSStringFromClass(self.classForCoder)
    sendEvent(withViewControllerName: className)
}
2
JPetric 15 dic. 2016 a las 15:57

La respuesta dada por @JPetric es un punto de partida increíble. Solo tuve que hacer una pequeña modificación para que funcionara.

Puse esto en mi AnalyticsViewController para recuperar el nombre de la subclase actual.

private func currentClassName() -> String? {
        return NSStringFromClass(self.classForCoder).components(separatedBy: ".").last
    }
0
jarora 7 sep. 2018 a las 01:06