Dan*_* Z. 10 objective-c ios5 xcode4.3
我是Objective-C的新手,我来自Java背景,因此我发现指针的概念而不是 - 那很好地解释了编译错误相当令人生畏.
我有一个使用jsonControllerDidLinkedInAuth方法实现委托的类.每当委托发送消息给这个类,通过自身和(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];
}
}
Run Code Online (Sandbox Code Playgroud)
似乎问题是由于某种原因我无法访问我当前的类的authUrl属性.我尝试使用authUrl,[self authUrl]和self.authUrl,但这似乎没有做到这一点.属性是合成的,但我也注意到一点提示:"UINavigationController setUrlAddress",这不应该像上面方法中定义的LinkedInViewController一样吗?我尝试了cast(LinkedInViewController)[segue destinationViewController],但后来我收到一条消息,通知我你不能投射指针.
任何帮助将受到高度赞赏.谢谢阅读.
编辑1:setUrlAddress正上方的NSLog确实返回self.authUrl.我假设它必须是某种可见性问题,但我不知道如何解决这个问题.
Sco*_*ets 21
如果视图控制器嵌入在UINavigationController中,则segue.destinationViewController引用该导航控制器.这是你可以使用的:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"LinkedInAuth"]) {
UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController;
LinkedInViewController *linkedInViewController = [[navigationController viewControllers] lastObject];
linkedInViewController setUrlAddress:self.authUrl];
}
}
Run Code Online (Sandbox Code Playgroud)
如果你有超过1个segue转换到嵌入在UINavigationController中的视图控制器,我通常将它添加到以下的开头prepareForSegue:sender:
if ([segue.destinationViewController isKindOfClass:[UINavigationController subclass]])
id vc = [[(UINavigationController *)segue.destinationViewController viewControllers] lastObject]
Run Code Online (Sandbox Code Playgroud)
现在vc包含您真正感兴趣的视图控制器,因此您不必为每个segue复制和粘贴转换.
| 归档时间: |
|
| 查看次数: |
5808 次 |
| 最近记录: |