将字符串传递给单独的WebViewController是不可能的

时间:2014-06-27 09:46:10

标签: ios objective-c xcode webview

我是Objective C和Xcode的新手,但是通过跟踪教程和搜索堆栈溢出来学习已经走了很长的路。我遇到了一个我似乎无法找到解决方案的问题。我知道我一定做错了(也许我的故事板设置不正确)。我试图做的是通过按第一个场景中的按钮在第二个场景中加载嵌入的网页。我需要按下按钮才能传递包含URL地址的NSString。我尝试了各种发件人 - 我目前使用的是:

- (IBAction)websiteButtonPressed:(id)sender {

    WebViewController *destinationController = [[WebViewController alloc]
        initWithString:self.webInfo];
    destinationController.webInfo = _webInfo;

}

_webInfo是一个包含URL的NSString。

WebViewController .h文件定义initWithString,如下所示:

- (id)initWithString:(NSString *)webInfo;

和WebViewController .m文件包含以下代码:

@synthesize webUrl;


 - (id)initWithString:(NSString *)webInfo
{
   self = [super initWithNibName:@"WebViewController" bundle:nil];
   if (self) {
    webUrl = [webInfo copy];       
    }
   return self;
}

在此处插入断点表示正在将相应的URL字符串传递给WebViewController。但是,当执行以下ViewDidLoad代码时,即使webUrl在init中具有相应的NSString,webURL和webView也是空的。

 NSURL *requestURL = [NSURL URLWithString:webUrl];  
 NSURLRequest *request = [NSURLRequest requestWithURL:requestURL];
[self.webView loadRequest:request];

有没有人有任何想法我做错了什么?我完全被这个问题困惑了。我尝试了许多不同的方法都具有相同的结果。如果我在ViewDidLoad中插入NSURL *requestURL = [NSURL URLWithString:@"http://www.apple.com"];之类的内容,Apple网站会正确显示。

2 个答案:

答案 0 :(得分:0)

快速简便的解决方案是将代码从viewDidLoad移至initWithString

为属性webInfo创建一个setter方法,并编写代码以从那里加载webView。

答案 1 :(得分:0)

在WebViewController.h中创建NSString属性

@property (strong, nonatomic) NSString * webInfo;

然后在你的IBAction中设置属性

WebViewController *destinationController = [[WebViewController alloc]init];
destinationController.webInfo = @"YOUR URL";
不要忘记转到新视图(如果您使用导航控制器,此示例有效

[self presentViewController:destinationController animated:YES completion:nil];

然后在你的viewDidLoad中执行此操作

NSURL *requestURL = [NSURL URLWithString:_webInfo];  
NSURLRequest *request = [NSURLRequest requestWithURL:requestURL];
[self.webView loadRequest:request];