Tengo una vista de tabla habilitada para ConfigureTableViewController que tiene dos celdas estáticas Usuarios y Ubicaciones. La celda de vista de tabla de usuarios está conectada a ListUserTableViewController a través de usersSegue. La celda de vista de tabla de ubicaciones está conectada a LocationTableViewController a través de ubicaciones segue

ListUserTableViewController tiene un protocolo:

    protocol UserSelectionDelegate{
      func userDidSelectUser(userIdentifier:NSString)
    }

Selecciono el usuario de ListUserTableViewController y lo paso a ConfigureTableViewController, implementando el delegado UserSelectionDelegate

    class ConfigureTableViewController: UITableViewController, UserSelectionDelegate {
    …
    …

    // function pulls user’s fullName from Core Data table based on userIdentifier
    func userDidSelectUser(userIdentifier : NSString) {
    var fetchedResults: [User] = []

    let context = (UIApplication.shared.delegate as AppDelegate).persistentContainer.viewContext

     userIdentifierString = userIdentifier

    do {

        fetchedResults = try context.fetch(User.fetchRequest())
    }
    catch {
        print ("fetch task failed")
    }
    if fetchedResults.count > 0 {

        for user in fetchedResults{
            let aUser:User = user
            if (aUser.uniqueId! == userIdentifierString as String) {
                let fullName = aUser.firstName! + " " + aUser.lastName!
                print("selected user full name: " + (fullName as String))
            }
            else {
                continue
            }
        }
    }

}
}

Hasta ahora, todo bien..

Pero ahora, quiero tomar el nombre de usuario extraído de la base de datos y enviarlo a LocationTableViewController a través de ubicaciones segue.

A medida que hago la transición de ListUserTableViewController a ConfigureTableViewController, tengo el nombre de usuario, pero cuando dejo ConfigureTableViewController y voy a LocationTableViewController, pierdo el alcance de fullName.

De alguna manera tengo que almacenar este valor de fullName calculado en algún almacenamiento permanente, así que ¿debería ponerlo en una tabla en CoreData? Quiero evitar esto, que parece mucho trabajo.

¿Puedo usar algún tipo de encadenamiento de delegados para que LocationTableViewController pueda implementar un delegado definido en ConfigureTableViewController y extraer los datos del otro UserSelectionDelegate que ya se ha implementado y tiene el nombre completo en su alcance?

Por favor avise, ¿cómo solucionar este problema?

0
vrao 2 ene. 2017 a las 01:25

1 respuesta

La mejor respuesta

Enunciado confuso del problema:

Pierdo el alcance de fullName

Debe guardar cualquier cambio en el objeto User y recuperar estos cambios en el siguiente controlador de vista. Si el siguiente controlador de vista usa el mismo NSManagedObjectContext, también puede pasar el mismo objeto User.

Entonces tienes todos los datos del nombre completo.

Esto se implementa comúnmente como un método personalizado de la clase User que inspecciona su propio nombre y apellido y devuelve una cadena con el formato adecuado.

0
Mundi 3 ene. 2017 a las 09:56
Estoy tratando de pasar una identificación de usuario junto con ella, para poder obtener el nombre de usuario de la base de datos. Tu respuesta da una solución parcial. Pero lo aceptaré.
 – 
vrao
6 ene. 2017 a las 07:23