您不必为此使用NSMutableString。
向第二个视图控制器添加一个属性url,只是一个普通的NSString。在将第二个视图控制器推送到导航堆栈之前,将 url 属性设置为要加载的本地 url。
然后,在第二个视图控制器类中,实现:
- (void)setUrl:(NSString *)newUrl {
if(url != newUrl){
[url release];
url = [newUrl retain];
// [webView load.... load the new url in the webView.
}
}
这可能超出了您目前的知识范围,它包含一些重要的 Objective-C 代码,例如属性、设置器和内存管理,但只需对其进行测试,看看您可以做些什么来使其工作。
EDIT 你甚至不需要这个属性。只需在 webViewController 中实现loadUrl: 之类的方法即可。
- (void)loadUrl:(NSString *)url {
// [webView load.... load the URL in the webView
}
然后,在推送 webViewController 之前,使用您要加载的 URL 调用此方法。避免一个属性并摆脱所有额外的内存管理代码。
if (self.myWebViewController == nil) {
//initialise
webViewController *viewWeb = [[webViewController alloc] initWithNibName:@"webViewController" bundle:[NSBundle mainBundle]];
self.myWebViewController = viewWeb;
[viewWeb release];
}
[self.myWebViewController loadUrl:@"some-local-url"];
[self.navigationController pushViewController:self.myWebViewController animated:YES];
请注意,一个好的做法是将每个类名大写。现在你有一个类webViewController,但在Cocoa 中通常将类命名为WebViewController,然后你可以有一个名为webViewController 的变量。此外,您可以清楚地看到您是在处理对象(变量)还是只是一个类。
编辑更新
所以我忘记了在加载视图之前不会加载 webView 的事实。要解决它,您必须重新引入我之前谈到的属性。这次做了一些调整。在您的 webViewController 类中,添加以下代码:
- (void)viewDidLoad {
// viewDidLoad gets automatically called once the view has loaded. Here we want to load the webView.
[self loadWebView];
}
- (void)setUrl:(NSString *)newUrl {
if(url != newUrl){
[url release];
url = [newUrl retain];
// Update the webView with the newly set URL. This will not do anything if the view hasn't been loaded, since webView will still be nil. That's why we call loadWebView again when the view gets loaded, in viewDidLoad.
[self loadWebView];
}
}
- (void)loadWebView {
// Here you'll have to load the url. You can access it using `self.url`.
//[webView load...
}
现在,在第一个视图控制器中,将 [self.myWebViewController loadUrl:@"some-local-url"]; 更新为 self.myWebViewController.url = @"some-local-url";。