2010-05-17 4 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 - out of scope

+1

Где? Адресurl'? – Chuck

ответ

1

Это зависит от того, где объявлена ​​переменная adressurl. Поскольку он генерируется из параметра метода, кажется странным, что вы хотите использовать его в другом месте в коде. Если у вас это как статическая переменная, это может быть вызвано другим кодом. (Например, если вы установите его в одно значение в этом методе, а другое в другом месте, это не является необычным для сбоев, особенно если вы не координируете или не синхронизируете между ними. Одна из причин, чтобы избежать глобальных/статических данных. вы можете использовать одно и то же имя локальной переменной по-разному, если хотите.

Вот что я предлагаю делать вместо этого: (Примечание: Я исправил некоторые опечатки.)

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

Это короче и позволяет избежать ненужных переменных. Так как префикс «http: //» довольно распространен, это не похоже на повторное использование, что обеспечит большую выгоду. Есть что-то еще, что мне не хватает?


Edit: Для уточнения опечатки в моем комментарии, вы можете получить URL в виде строки из UIWebView следующим образом:

[[[webview request] URL] absoluteString] 

Это использует следующие методы прикованы вместе:

+0

adressurl объявлен как ivar в этом представлении. причина, по которой я помещаю url в adressurl, заключается в том, что мое приложение должно добавлять закладки, когда пользователь хочет. поэтому каждый раз, когда я загружаю URL-адрес, я помещаю его также в эту переменную, чтобы его можно было добавить в закладки. –

+0

Поскольку вы используете UIWebView, почему бы просто не запросить свойство 'request' и получить URL-адрес от него, если/когда вам нужно сделать закладку? (например, '[[[[URL запроса веб-просмотра]] absoluteURL]') –

+0

спасибо. результатом того, что вы написали, является NSString? –