NSURLConnection аварийно завершает работу приложения, но только после открытия и закрытия приложения электронной почты - PullRequest
1 голос
/ 18 января 2012

У меня странная проблема, которая приводит к сбою моего приложения, и я хотел бы высказать несколько мнений, если это возможно.

У меня есть NSURLConnection, отправка данных POST во внешний файл PHP и получение ответа, который отображается на iPhone.

Все это прекрасно работает и может быть выполнено много раз без ошибок, без каких-либо утечек, обнаруженных в анализе, и без сбоев.

Приложение также имеет опцию «отправить ответ по электронной почте», и если она нажата, программа электронной почты открывается, и все также работает без проблем.

Однако при закрытии программы электронной почты и возвращении обратно в основное приложение, если теперь нажата кнопка «извлечения данных» и снова выполнено соединение NSURLConnection, приложение немедленно вылетает.

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

Весь мой код для NSURLConnection для POST и получения данных выглядит следующим образом:

- (void)FetchData {
result.text = @"";
emailbutton.hidden = YES;
emailbutton.enabled = NO;

NSString *queryStringFull = [queryStringFirst stringByAppendingString:textField.text];

NSURL *url = [NSURL URLWithString:@"http://www.mydomain.com/mypage.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSData *requestData = [queryStringFull dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPMethod:@"POST"];
[request setValue:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
[NSURLConnection connectionWithRequest:(request) delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
responseData = [[NSMutableData alloc] init];
}

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

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSString* responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
if (![responseString isEqualToString:@"error"]) {
    result.text = responseString;
    emailbutton.hidden = NO;
    emailbutton.enabled = YES;
}
[responseString release];
[responseData release];
}

Буду очень признателен за любые идеи или мысли о том, что является причиной этого и как его решить.

1 Ответ

0 голосов
/ 18 января 2012

На самом деле, это вообще не было NSURLConnection!

Оказывается, это был вызов изображения, который происходит после вызова NSURLConnection.Изображение было определено в viewdidload, выпущено, а затем не было определено после того, как приложение вернулось из фона.

Добавление «сохранения» к определению изображения в viewdidload решило проблему!

...