Soy relativamente nuevo en Objective-C y vengo de un fondo Java, por lo tanto, me parece bastante desalentador la noción de punteros y errores de compilación no bien explicados.Accediendo a la propiedad en prepareForSegue de UIViewController
Tengo una clase que implementa un delegado con el método jsonControllerDidLinkedInAuth. Cada vez que el delegante enviar un mensaje a esta clase, haciéndose pasar y una url (NSURL *), estoy tratando de asignar el url a una propiedad AuthURL, cuando estas operaciones acabados llaman el performSegueWithIdentifier, que se ejecuta a su vez el prepareForSegue (en lo que respecta a mi comprensión de esto).
Esto no parece funcionar, ya que estoy recibiendo una:
App [3278: 13517] * Terminación de aplicación debido a excepción no detectada 'NSInvalidArgumentException', razón: '- [UINavigationController setUrlAddress :]: selector no reconocido enviado a instancia 0x6acab00'
mensaje de error que termina la aplicación con SIGABRT.
Ambos métodos residen en la misma clase, que es un UINavigationController y apunta a otro UINavigationController. El compilador me apunta al [vc setUrlAddress:self.authUrl];
del segundo método.
- (void)jsonControllerDidLinkedInAuth:(JsonController *)controller :(NSURL *)url {
authUrl = url;
if (authUrl != nil) {
[self performSegueWithIdentifier:@"LinkedInAuth" sender:self];
} else {
NSLog(@"Auth URL is null");
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"LinkedInAuth"]) {
// Get destination view
LinkedInViewController *vc = [segue destinationViewController];
NSLog(@"The auth url from prepareForSegue in SignupViewControlle: %@", self.authUrl);
[vc setUrlAddress:self.authUrl];
}
}
Lo que parece ser el problema es que por alguna razón no puedo acceder a la propiedad de la clase AuthURL actualmente soy. Intenté con authUrl, [self authUrl] y self.authUrl pero nada de esto parece hacer el trabajo. Las propiedades están sintetizadas, pero también he notado una pequeña sugerencia: "UINavigationController setUrlAddress", ¿no debería ser esto un LinkedInViewController como se define en el método anterior? Intenté lanzar (LinkedInViewController) [segue destinationViewController], pero luego recibí un mensaje que me informaba que no se podía convertir en un puntero.
Cualquier ayuda sería muy apreciada. Gracias por leer.
Edición 1: El NSLog justo encima de setUrlAddress devuelve self.authUrl. Supongo que debe ser un problema de visibilidad, pero no estoy seguro de cómo resolverlo.
Gracias, esto funciona como un encanto!Además, su mensaje me ahorró mucha depuración ya que hay pocos otros ViewControllers que se comporten de manera similar. –
De nada. Consulte mi respuesta actualizada para obtener una forma fácil de acceder al controlador de vista que le interesa sin tener que realizar el comando cada vez. –