2012-02-08 2 views
1

Я бы посоветовал о выборе сетевой библиотеки iOS для моего приложения.iOS Networking Library Предложение

Мои потребности:

  1. Отправить асинхронный запрос (GET и POST), и если сеть не отображается UIAlertView, чтобы сообщить пользователю об ошибке.
  2. Отправьте простой синхронный запрос (GET), и если сеть отключена, сделайте то же самое из вышеуказанной точки.

У кого-нибудь есть lib, чтобы предложить? (за исключением ASIHTTPRequest, который больше не поддерживается) Возможно, если у этого lib есть хороший документ, лучше. Я новичок iOS.

Благодарим за помощь.

ответ

2

Я слышал хорошие вещи о RestKit https://github.com/RestKit/RestKit

Существует хороший список альтернатив, в нижней части этого блога. http://allseeing-i.com/[request_release];

Раньше я использовал только ASIHTTPRequest, и хотя он не разрабатывается Ben Copsey, похоже, что он все еще сжимает запросы на тягу и прочее. Он используется многими людьми, я не удивлюсь, если сообщество подберет его. Вероятно, это будет безопасно, по крайней мере, для другой версии iOS.

+0

RestKit немного отличается от ASI - это скорее структура синхронизации для автоматического преобразования ответов JSON в графы объектов. Это определенно переполняет то, что пытается сделать ОП. –

+0

@ Randall, как вы управляете ситуацией без подключения к Интернету? –

1

Для этого вам не нужна библиотека.

Чтобы отправить запрос на синхронную GET:

//set up the GET URL and params 
NSURL *getURL = [NSURL URLWithString:@"http://somesite.com/somepath?foo=bar"]; 

//create the request 
NSURLRequest *request = [NSURLRequest requestWithURL:getURL]; 

//get the response 
NSError *error = nil; 
NSURLResponse *response = nil; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

Чтобы отправить запрос синхронное POST:

//set up the POST URL and params 
NSURL *postURL = [NSURL URLWithString:@"http://somesite.com/somepath"]; 
NSString *postParams = @"foo=bar&hello=world"; 

//create the request - this bit is the same for every post 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:postURL]; 
[request setHTTPMethod:@"POST"]; 
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
NSData *data = [postParams dataUsingEncoding:NSUTF8StringEncoding]; 
[self addValue:[NSString stringWithFormat:@"%i", [data length]] forHTTPHeaderField:@"Content-Length"]; 
[self setHTTPBody:data]; 

//get the response 
NSError *error = nil; 
NSURLResponse *response = nil; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

В любом случае, если responseData равен нулю или ошибка не ноль, представить уведомление с помощью следующие:

[[[[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show]; 
+0

Не забывайте, что вам нужно избегать ваших параметров. В противном случае такие вещи, как «&» в аргументах, нарушат разбор переменных. – Randall

+1

Хорошая точка. Я написал удобную мини-библиотеку для создания строк с безопасными URL-адресами (избегая хорошо документированных проблем с использованием метода stringByAddingPercentEscaping:) https://github.com/nicklockwood/URLUtils –

+0

Что случилось с этой ссылкой, Nick ? –

1

Как указано в вопросе, он также ищет асинхронные запросы ц.

Я бы предложил AFNetworking или GCNetworkKit (последний из моих собственных). Обе библиотеки очень просты в использовании и все же эффективны.

Я не думаю, что AFNetworking предоставляет синхронный сетевой запрос. Ну, по крайней мере, у меня нет. Вы все равно не должны этого делать. Обе библиотеки поддерживают обработку ошибок. Не должно быть никаких проблем при реализации UIAlertView.

Вы можете найти их на GitHub. Просто найдите их. Надеюсь, это поможет :)

+0

Я искал AFNetworking, и я видел, как его использовать. Но я все еще не нахожу, как обращаться с ошибкой (например, без подключения к Интернету). Знаете ли вы некоторые рекомендации для этого? –

+0

Обработка ошибок довольно проста в AFNetworking. Взгляните на этот https://github.com/AFNetworking/AFNetworking/blob/master/AFNetworking/AFHTTPRequestOperation.h. Последний метод :) –

+0

Должен ли я использовать этот метод для обработки, когда нет подключения к интернету и отображается предупреждение? Спасибо чувак. –