Доступ к веб-серверу из приложения какао - PullRequest
4 голосов
/ 26 декабря 2008

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

Ответы [ 6 ]

5 голосов
/ 26 декабря 2008

Если вы хотите загрузить содержимое файла в память, многие классы данных Какао, такие как NSString, NSData и даже NSDictionary, имеют методы initWithURL:, которые инициализируются непосредственно с содержимым веб-запроса. Они очень просты в использовании, но они не очень гибки или обеспечивают хорошую обработку ошибок. NSURLConnection предоставляет более гибкий способ загрузки данных, если вам это нужно.

Если вы хотите загрузить файл прямо на диск, тогда NSURLDownload будет лучшим выбором.

2 голосов
/ 27 декабря 2008

Предупреждение: методы initWithURL: блокируются, что является большой проблемой, если файл большой, сервер медленный, интернет-соединение пользователя медленное и т. Д. Не вызывайте их из основного потока.

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

Почти во всех случаях вы должны использовать вместо этого NSURLDownload или NSURLConnection.

1 голос
/ 17 января 2009

NSURLConnection обеспечивает максимальную детализацию, но будьте осторожны с методом sendSynchronousRequest () NSURLConnection. Он теряет память каждый раз (подключил инструмент XCode Leak Instrumentation и запускаю его, чтобы доказать это самому себе) и дает странные ответы HTTP 204 без всякой причины. Я писал об этом здесь

1 голос
/ 07 января 2009

NSURLConnection хорош, если вы хотите получить данные из веб-службы в NSString или NSData. Убедитесь, что вы делаете асинхронные вызовы и обрабатывает ошибки и данные в методах NSURLConnection

Вот хороший пример для вызовов в стиле REST http://kosmaczewski.net/2008/03/26/playing-with-http-libraries/

1 голос
/ 26 декабря 2008

Самое простое, что можно сделать - это использовать NSURLDownload с NSURLRequest.

0 голосов
/ 28 декабря 2008

И еще один способ - использовать libcurl, который предустановлен в любой системе OS X. Вам лучше убедиться, что такие системные параметры, как прокси и т. Д. Соблюдаются, если вы используете этот подход.

...