Objective c nsstring-超出范围

Objective c nsstring-超出范围,objective-c,Objective C,尽管url从ADRESURL获取其值,但在调试器中签入时,ADRESURL始终超出范围。发生了什么事?我也想在其他地方使用它。不仅在这种方法中。由于超出范围,应用程序崩溃。但是,我重复一遍,是谁给了url它的价值 这取决于adressurl变量的声明位置。由于它是从method参数生成的,所以您希望在代码的其他地方使用它似乎有些奇怪。如果将其作为静态变量,则可能会被其他代码踩死。(例如,如果您在此方法中将其设置为一个值,而在其他地方设置为另一个值,则发生崩溃的情况并不罕见,特别是如果您不协调或同

尽管url从ADRESURL获取其值,但在调试器中签入时,ADRESURL始终超出范围。发生了什么事?我也想在其他地方使用它。不仅在这种方法中。由于超出范围,应用程序崩溃。但是,我重复一遍,是谁给了url它的价值

这取决于
adressurl
变量的声明位置。由于它是从method参数生成的,所以您希望在代码的其他地方使用它似乎有些奇怪。如果将其作为静态变量,则可能会被其他代码踩死。(例如,如果您在此方法中将其设置为一个值,而在其他地方设置为另一个值,则发生崩溃的情况并不罕见,特别是如果您不协调或同步这两个值。这是避免全局/静态的一个原因。)如果愿意,您可以在不同的方法中自由使用相同的局部变量名称

以下是我的建议:(注意:我已经修正了一些拼写错误。)

这会缩短时间并避免不必要的变量。由于“http://”前缀相当常见,因此重用它似乎不会带来那么多好处。我还缺什么吗


编辑:要澄清我评论中的输入错误,您可以从UIWebView以字符串形式获取URL,如下所示:

- (void) loadWebAddress:(NSString*)textAddress {
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", textAddress]];
    [webview loadRequest:[NSURLRequest requestWithURL:url]];
}
这将使用以下链接在一起的方法:


在哪里声明了
addressurl
?在该viewcontroller中,肾上腺被声明为ivar。我之所以将url放入AdresURL,是因为我的应用程序必须在用户需要时添加书签。因此,每次加载url时,我都会将其放在该变量中,这样它就可以被书签。既然您使用的是UIWebView,为什么不直接查询
请求
属性,并在需要书签时从该属性获取url呢?(例如,
[[[webview request]URL]absoluteURL]
)对我来说,在NSString中提取URL是很重要的,因为这进一步被放在数据库中的特定结构中。
- (void) loadWebAddress:(NSString*)textAddress {
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", textAddress]];
    [webview loadRequest:[NSURLRequest requestWithURL:url]];
}
[[[webview request] URL] absoluteString]