Я относительно новичок в Objective-C, и я исхожу из фона Java, поэтому я нахожу понятие указателей и не очень хорошо объясненных ошибок компиляции довольно сложным.
У меня есть класс, который реализует делегат с помощью метода jsonControllerDidLinkedInAuth. Всякий раз, когда делегировать отправляет сообщение этому классу, передавая сам и URL (NSURL *), я пытаюсь присвоить url свойство authUrl, когда эти операции заканчиваются, вызовите функцию performSegueWithIdentifier, которая, в свою очередь, выполняет команду prepareForSegue (насколько я понимаю это).
Это не работает, поскольку я получаю:
Приложение [3278: 13517] * Завершение приложения из-за неотображенного исключения "NSInvalidArgumentException", причина: '- [UINavigationController setUrlAddress:]: непризнанный селектор, отправленный в экземпляр 0x6acab00'
которое завершает приложение с помощью SIGABRT.
Оба метода находятся в одном классе, который является UINavigationController и указывает на другой UINavigationController. Компилятор указывает мне на [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];
}
}
Кажется, что проблема заключается в том, что по какой-то причине я не могу получить доступ к свойству authUrl класса I, который я сейчас являюсь. Я пробовал с authUrl, [self authUrl] и self.authUrl, но ничто из этого не похоже на работу. Свойства синтезируются, но я также заметил небольшой намек: "UINavigationController setUrlAddress", не должен ли это быть LinkedInViewController, как определено выше в методе? Я попробовал кастинг (LinkedInViewController) [segue destinationViewController], но потом я получил сообщение, уведомляющее меня о том, что вы не можете наложить указатель.
Любая помощь будет высоко оценена. Спасибо за чтение.
Изменить 1: NSLog чуть выше setUrlAddress возвращает self.authUrl. Я предполагаю, что это должна быть какая-то проблема видимости, но я не уверен, как это решить.