используя NSURLConnection вместо stringWithContentsOfURL - PullRequest
0 голосов
/ 06 мая 2011

Ребята, я получал ответ XML из скрипта .php на моем сервере, используя следующий код:

 NSString *xmlString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString]
 encoding:NSUTF8StringEncoding error:&error];

и

//tried also: if(error)
if(!xmlString)
{
    NSString * errorString = [NSString stringWithFormat:@"Unable to download xml data (Error code %i )", [error code]];
    UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [errorAlert show];
    [errorAlert release];
}

//*** now I have a touchXML xPath query code that extracts what I need from XML

Мой скрипт .php не былработает сегодня, и мой iApp зависает без каких-либо предупреждений, ошибок или уведомлений?Я думал, что приведенный выше код будет обрабатывать ошибки, но это не так

1008 * A) Тогда какой тип ошибки он ловит?

Тогда я вспомнил, что мне следует попробовать работать сNSURLConnection и его методы делегата, чтобы перехватить любую ошибку, которая происходит.

//Inside viewDidLoad method        
NSMutableData *responseData = [[NSMutableData alloc] init];

NSURL *baseURL = [[NSURL URLWithString:self.chosenDrawRss] retain];

NSURLRequest *request = [NSURLRequest requestWithURL:baseURL];

[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];

NSString *xmlString = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding];

Проблема, с которой я столкнулся при использовании этого подхода, заключалась в том, что приложение запускало соединение в фоновом режиме и продолжало выполнять остальную часть кода, найденного в viewDidLoad, поэтому мне пришлось немного реорганизовать свой код, переместив его вдругой метод, который я вызываю из метода делегата connectionDidFinishLoading.У меня проблема в том, что мои методы делегата не вызываются.Ну, все, кроме didFailWithError: , если я пытаюсь загрузить URL, который не существует.

ОБНОВЛЕНИЕ: методы делегата вызываются, но это занимает одну минутуили так для вызова метода делегата и до тех пор, пока не появится предупреждающее сообщение ...

B) Могу ли я использовать stringWithContentsOfURL и по-прежнему получать предупреждение для пользователя, если что-то случится?

C) Если нет, то мне нужна помощь с настройкой подхода NSURLConnection?Я имею в виду, что я здесь упускаю, почему мои методы делегатов не вызываются?

Я искренне надеюсь, что мои вопросы имеют смысл: D L

1 Ответ

0 голосов
/ 06 мая 2011

Если ваш метод делегата вызывается в didFailWithError, то, я полагаю, он даже будет вызываться в connectionDidFinishLoading. Проверьте, включив точку останова в методах делегата и отследите поток. Может случиться так, что функция вернется до вызова делегата.

NSString *xmlString = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding]

должен вызываться в вашем методе делегата connectionDidFinishLoading и в

- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [responseData appendData:data];
}

Я не понимаю, почему предупреждение должно появляться через минуту, если вы не выполняете какую-либо обработку перед его отображением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...