通过舆论传递信息

时间:2013-12-22 18:31:32

标签: ios objective-c uiwebview nsstring uistoryboardsegue

我正在尝试从UITextView获取HTML代码,并让用户在下一个segue的UIWebView中查看它。这是我到目前为止所拥有的。

  • DetailViewController - 使用UITextView的视图:
    • UITextView:codeView
  • PreviewViewController - 使用UIWebView的视图
    • UIWebView:webView
    • UIWebView代码:webViewCode

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];
}

所有内容都在界面构建器中连接,包括Storyboard Segue Identifier。正如您所看到的,我已经尝试了多种方式来传递信息,但只是出现了错误。有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

此代码没有意义:

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,该属性由完全不同的实例变量支持,可能为nil。不要那样做。摆脱“自我”。在这一行:

    preview.webViewCode = [[NSString alloc] initWithString:codeView.text];

然后完全删除下面的行,因为它与之前的行完全相同。