.Net HttpWebRequest / Ответ Какао Equivelant - PullRequest
0 голосов
/ 05 мая 2010

В настоящее время я пытаюсь перенести приложение .Net на Objective C и Cocoa. Я знаю основы, и у меня было мало проблем с большинством вещей. Но у меня проблемы с получением данных из Интернета.

В C # я бы использовал POST и GET для получения информации с сервера как такового

byte[] buffer = Encoding.ASCII.GetBytes("someData");

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = buffer.Length;

Stream postData = request.GetRequestStream();
postData.Write(buffer, 0, buffer.Length);
postData.Close();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());

while (!reader.EndOfStream)
{
   String data = read.ReadLine();
   //Do something such as an update on each line read in
}

reader.Close();
response.Close(); 

но мне не очень повезло найти эквивлант с какао. Я видел использование таких вещей, как NSUrlDownload, но все примеры, которые я могу найти, всегда показывают загрузку данных в виде одного вызова функции блокировки. Где мне нужно, чтобы иметь возможность обновлять информацию по мере получения данных, а не просто ждать, пока все это прибудет, а затем иметь дело с этим. И в идеале я мог бы иметь дело с различными типами данных, такими как текстовые или двоичные данные, поэтому мне нужно что-то похожее на поток, который я могу передать в какой-то анализатор.

Итак, мой вопрос: что такое эквивлант кода C # выше?

1 Ответ

3 голосов
/ 05 мая 2010

Вам необходимо использовать NSURLConnection и назначить объект в качестве его делегата. Когда соединение получает данные, оно вызывает метод делегата -connection:didReceiveData:, который можно использовать для обработки входящих данных по мере необходимости.

Вам нужно будет самостоятельно создать запрос HTTP POST. В своем ответе на этот вопрос .

я опубликовал код, показывающий, как это сделать.
...