通过Segue传递信息
问题描述:
我试图从UITextView获取HTML代码,并让用户在下一个Segue的UIWebView中实时查看它。这是我到目前为止。通过Segue传递信息
- DetailViewController - 视图与UITextView的:
- 的UITextView:
codeView
- 的UITextView:
- PreviewViewController - 视图与UIWebView中
- 的UIWebView:
webView
- UIWebView的代码:
webViewCode
- 的UIWebView:
DetailViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
if ([[segue identifier] isEqualToString:@"webViewCode"]) {
PreviewViewController *preview = [segue destinationViewController];
preview.webViewCode = self.codeView.text;
self.preview.webViewCode = [[NSString alloc] initWithString:codeView.text];
[[segue destinationViewController] setWebViewCode:codeView.text];
}
}
PreviewViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[webView loadHTMLString:webViewCode baseURL:nil];
}
一切都连接在界面生成器,包括故事板Segue公司标识符。正如你所看到的,我已经尝试了多种方式来传递信息,但只是出现了错误。有什么我失踪?
答
这个代码是没有意义的:
if ([[segue identifier] isEqualToString:@"webViewCode"]) {
PreviewViewController *preview = [segue destinationViewController];
preview.webViewCode = self.codeView.text;
self.preview.webViewCode = [[NSString alloc] initWithString:codeView.text];
[[segue destinationViewController] setWebViewCode:codeView.text];
}
您创建一个局部变量预览,类型PreviewViewController的。正如其他海报指出,需要一个类型转换到这个以避免编译器警告:
PreviewViewController *preview =
(PreviewViewController*) [segue destinationViewController];
真正的问题,不过,是你再不理你刚才定义的局部变量,并尝试使用属性self.preview,它由完全不同的实例变量支持,可能为零。不要这样做。摆脱“自我”。位于此行:
preview.webViewCode = [[NSString alloc] initWithString:codeView.text];
然后完全删除下面的行,因为它与前面的行做了同样的事情。
你会得到什么错误?请明确点。 – matt
你必须有一些空值,你有没有尝试进入代码? – ryudice
@matt没有错误,但WebView没有任何东西 - 只是空白。我的道歉不包括在我原来的帖子。 –