Jestem stosunkowo nowy w stosunku do Objective-C i pochodzę z tła Java, dlatego uważam, że pojęcie wskaźników i nie-dobrze objaśnionych błędów kompilacji jest dość zniechęcające.Uzyskiwanie dostępu do właściwości w pliku prepareForSegue elementu UIViewController
Mam klasę, która implementuje delegata z metodą jsonControllerDidLinkedInAuth. Ilekroć Delegator wysłać wiadomość do tej klasy, przekazując sobie i A (bibliotece NSURL *) URL próbuję przypisać url do nieruchomości authUrl, kiedy to operacje wykończenia nazywamy performSegueWithIdentifier, co z kolei sporządzi the prepareForSegue (o ile rozumiem to).
nie wydają się działać, jak ja odbierania:
App [3278: 13517] * kończące aplikację spowodowane nieprzechwyconego wyjątku 'NSInvalidArgumentException', rozum: „- [UINavigationController setUrlAddress :]: nierozpoznany selektor wysyłane do instancji 0x6acab00'
komunikat o błędzie, który kończy aplikację z SIGABRT.
Obie metody znajdują się w tej samej klasie, która jest kontrolerem UINavigationController i wskazuje na inny kontroler UINavigationController. Kompilator wskazuje mi, że druga metoda to [vc setUrlAddress:self.authUrl];
.
- (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];
}
}
To, co wydaje się być problemem, to że z jakiegoś powodu nie mam dostępu do własności authUrl klasy I obecnie. Próbowałem z authUrl, [self authUrl] i self.authUrl, ale nic z tego nie działa. Właściwości są syntetyzowane, ale zauważyłem też małą podpowiedź: "UINavigationController setUrlAddress", czy nie powinien to być LinkedInViewController, jak zdefiniowano w powyższej metodzie? Próbowałem casting (LinkedInViewController) [segue destinationViewController], ale następnie pojawia się komunikat powiadamiający mnie, że nie można rzucić na wskaźnik.
Każda pomoc będzie bardzo ceniona. Dziękuje za przeczytanie.
Edytuj 1: NSLog tuż nad setUrlAddress zwraca self.authUrl. Zakładam, że musi to być jakiś problem z widocznością, ale nie jestem pewien, jak rozwiązać ten problem.
Dziękuję, działa to jak urok!Ponadto twoja wiadomość zaoszczędziła mi sporo debugowania, ponieważ istnieje niewiele innych kontrolerów ViewController, które zachowywałyby się w podobny sposób. –
Nie ma za co. Zobacz moją zaktualizowaną odpowiedź, aby w łatwy sposób uzyskać dostęp do kontrolera widoku, który Cię interesuje, bez konieczności przesyłania za każdym razem. –