Правильная обработка ошибок NSURLConnection - PullRequest
0 голосов
/ 07 июня 2010

У меня настроен простой интерфейс формы, который отправляет информацию об имени пользователя и пароле на сервер: (работает)

    NSString *postData = [NSString stringWithFormat:@"user=%@&pass=%@",[self urlEncodeValue:sysUsername],[self urlEncodeValue:password]];
NSLog(@"Post data -> %@", postData);
///
NSData* postVariables = [postData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] init] autorelease];
NSString* postLength = [NSString stringWithFormat:@"%d", [postVariables length]];
NSURL* postUrl = [NSURL URLWithString:@"http://localhost/~csmith/cocoa/test.php"];
[request setURL:postUrl];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody: postVariables];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:NULL error:NULL];
NSLog(@"Post data SENT & returned -> %@", returnData);

Как обрабатывать ошибки подключения, такие как отсутствие подключения к Интернету, брандмауэр и т. Д. Кроме того, этот метод использует общесистемные настройки прокси? Многие из моих пользователей находятся за прокси.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 08 июня 2010

Вы должны использовать асинхронный запрос для обработки ошибок прокси и сети. Это более эффективно. Чтобы добавить дополнительную проверку, вы можете добавить тест достижимости в свой код перед связью. Вы можете найти тестовый код достижимости здесь

1 голос
/ 07 июня 2010

Во-первых, вы не должны использовать синхронные запросы, вместо этого использовать асинхронный запрос и указывать активность с помощью неопределенных индикаторов прогресса .

При использовании асинхронных запросов вы должны установить делегат, реализующий методы делегата , в частности:

Из документов:

Если NSURLConnection не получит сообщение об отмене, делегат получит одно и только одно сообщение connectionDidFinishLoading: или connection:didFailWithError:, но никогда оба. Кроме того, после того, как любое из сообщений отправлено, делегат больше не будет получать сообщения для данного NSURLConnection.

Что касается последнего вопроса:

Кроме того, этот метод использует общесистемные настройки прокси?

Да, NSURLConnection использует их автоматически.

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