iPhone:nib文件+代码=混淆

我对何时应该使用NIB文件以及什么时候应该使用代码感到有些困惑。 这是我的问题: 我有一个基于导航的应用程序与RootController及其NIB文件。 RootController的NIB文件包含TableView。 当我单击一个单元格时,我使用加载内容的请求初始化一个新连接。 当连接完成加载后,我从NIB文件创建一个新的postViewController(自定义),我将它推送到navigationController viewController堆栈,如下所示:
PostViewController *postViewController = [[PostViewController alloc] initWithNibName:@"PostViewController" bundle:[NSBundle mainBundle]]; 

[postViewController.webView setDelegate:self];

postViewController.postContent = [[postsData objectForKey:@"post"] objectForKey:@"content"];

[self.navigationController pushViewController:postViewController animated:YES];

[PostViewController release];
然后,正如您所看到的,我尝试将rootViewController设置为webView的委托,以便能够拦截链接上的单击并在堆栈上推送新的ViewController。我需要新的视图来使用带有后退按钮的导航栏。 问题:看起来setDelegate无法正常工作,因为webView:shouldStartLoadWithRequest:navigationType永远不会被调用! 我想我应该在NIB文件中设置委托,但我不知道如何。 PostViewController的NIB文件不知道RootViewController ... 以下是NIB文件的屏幕截图: 如果您需要更多细节,请问我。 非常感谢...帮助我不再敲打我的脑袋:)     
已邀请:
[postViewController.webView setDelegate:self];
设置当前控制器的代表不是
postViewController
。尝试:
[postViewController.webView setDelegate:postViewController];
你可以把这行放在
pushViewController:animated:
以下,然后webView应该已经存在了。     
当你打电话给
setDelegate:
时,确保
postViewController.webView
不是零。还要确保没有在其他任何地方调用它,并确保代理插座未连接到NIB中的任何内容。 其他几条评论: 在这种情况下使用根视图控制器作为webview的委托是有点不寻常的。它应该工作,但将这些委托方法下移到PostViewController可能更有意义。从那里你仍然可以拦截链接点击并致电
[self.navigationController pushViewController:animated:]
[PostViewController release]
正在释放类对象。不是个好主意。相反,你应该打电话给
[postViewController release]
。     

要回复问题请先登录注册