我对Objective-C相对较新,之前有Java开发经验,因此指针和编译错误的概念让我感到有些困惑。
我有一个实现了代理(jsonControllerDidLinkedInAuth方法)的类。每当委托者向该类发送消息时,将自身和(NSURL*)url传递给该类,我试图将url赋值给属性authUrl,并在该操作完成后调用performSegueWithIdentifier,进而执行prepareForSegue (就我对此的理解而言)。
然而这似乎不起作用,因为我收到了以下这个SIGABRT终止应用程序的错误消息:
App[3278: 13517] * Terminating app due to uncaught exception 'NSInvalidArgumentException',reason:'-[UINavigationController setUrlAddress:]:在0x6acab00实例中未识别选择器发送'
这两个方法都位于同一类中,该类是一个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吗?我尝试进行类型转换(casting),但会收到一条消息,告知我不能对指针进行强制类型转换。
任何帮助将不胜感激。谢谢阅读。
编辑1:在setUrlAddress上方的NSLog确实返回了self.authUrl。我认为这可能是某种可见性问题,但我不确定如何解决。