Я относительно новичок в Objective -C, и я пришел из Java, поэтому я нахожу понятие указателей, а не -, которое -хорошо объяснило ошибки компиляции, довольно обескураживающим.
У меня есть класс, который реализует делегат с помощью метода jsonControllerDidLinkedInAuth. Всякий раз, когда делегатор отправляет сообщение этому классу, передавая себя и (URL-адрес NSURL *), я пытаюсь назначить URL-адрес свойству authUrl, когда эта операция завершится, вызовите PerformSegueWithIdentifier, который, в свою очередь, выполняет prepareForSegue (, насколько я это понимаю ).
Это не работает, так как я получаю:
App[3278:13517] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setUrlAddress:]: unrecognized selector sent to instance 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 класса, которым я сейчас являюсь. Я пробовал с authUrl, [self authUrl] и self.authUrl, но ничего из этого не работает. Свойства синтезируются, но я также заметил небольшую подсказку :«UINavigationController setUrlAddress», не должен ли это быть LinkedInViewController, как определено в методе выше? Я попытался выполнить приведение (LinkedInViewController )[segue destinationViewController], но затем я получаю сообщение, уведомляющее меня о том, что вы не можете выполнить приведение к указателю.
Любая помощь будет высоко ценится. Спасибо за чтение.
Редактировать 1 :NSLog чуть выше setUrlAddress действительно возвращает self.authUrl. Я предполагаю, что это какая-то проблема с видимостью, но я не уверен, как это решить.