2010-05-17 167 views
0
-(void)loadWebAdress:(NSString*)textAdress { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    adressurl=[NSString stringWithFormat:@"http://%@", textAdress]; 
    NSURL *url=[NSURL URLWithString:adressurl]; 
    NSURLRequest *requestObj=[NSURLRequest requestWithURL:url]; 
    [webview loadRequest:requestObj]; 
} 

虽然url从adressurl中获取它的值,但adressurl在调试器中检查时总是超出范围。到底是怎么回事?我也想在其他一些地方使用它。不仅在这个方法。因为超出范围,应用程序崩溃。但是,我再说一遍,它是向url提供价值的人。nsstring - 超出范围

+1

“addressurl”声明在哪里? – Chuck 2010-05-17 18:26:01

回答

1

这取决于adressurl变量的声明位置。由于它是从方法参数生成的,因此您希望在代码的其他地方使用它,这似乎很奇怪。如果你将它作为一个静态变量,它可能会被其他代码踩踏。 (例如,如果在此方法中将其设置为一个值,并且在其他地方将其设置为一个值,那么发生崩溃并不常见,尤其是如果您不在两者之间进行协调或同步时。避免全局/静态的一个原因。如果你喜欢,可以自由地以不同的方法使用相同的本地变量名称。

这里是我建议做,而不是:(注:我已经修正了一些错别字

- (void) loadWebAddress:(NSString*)textAddress { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", textAddress]]; 
    [webview loadRequest:[NSURLRequest requestWithURL:url]]; 
} 

这是短,避免了不必要的变数。由于“http://”前缀相当普遍,似乎不会重复使用,因此会带来很多好处。还有什么我失踪?


编辑:要澄清一个错字在我的评论,你可以得到URL从UIWebView的字符串如下:

[[[webview request] URL] absoluteString] 

它使用以下方法链接起来:

+0

adressurl在此视图控制器中被声明为ivar。我将url放入adressurl的原因是因为我的应用程序必须在用户需要时收藏。所以每次我加载一个url,我把它也放在那个变量中,所以它可以被加入书签 – 2010-05-17 18:38:08

+0

因为你使用的是UIWebView,为什么不只是查询'request'属性,并且在你需要书签的时候获取URL? (例如'[[[webview request] URL] absoluteURL]') – 2010-05-17 18:46:39

+0

谢谢。你写的结果是NSString? – 2010-05-17 18:57:25