2010-05-05 62 views
0

我目前正试图将一个.Net应用移植到Objective C和Cocoa。我知道基本知识,对大多数事情都没有什么麻烦。但是我无法从Web上检索数据。.net HttpWebRequest/Response Cocoa Equivelant

在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(); 

但我没有多少运气找到一个可可equivelant。我已经看到了诸如NSUrlDownload之类的东西的使用,但是我可以找到的所有示例总是将数据的下载显示为单个阻塞函数调用。我需要的是能够在接收数据时更新内容,而不是等待所有内容到达后再处理。理想情况下,我可以处理不同类型的数据,如文本或二进制文件,所以我需要类似于可传递给某种解析器的流。

所以我的问题是什么是上面的C#代码Equivelant?

回答

3

您需要使用NSURLConnection并指定一个对象作为其代表。当连接接收到数据时,它将调用-connection:didReceiveData:委托方法,您可以根据需要使用它来处理传入数据。

您将需要自己构建HTTP POST请求。我已经发布了一些代码,展示了如何在我对this question的回答中做到这一点。

+0

非常感谢你的工作,如果我想用你的方法发送一个字符串数组到一个PHP脚本如何管理与您使用的字典? – Tristan 2010-05-06 04:16:16

+0

发布PHP数组有点困难,因为您需要具有相同名称的多个值('nameOfKey []')。显然'NSDictionary'不能有多个同名的键,所以你可能想要创建一个自定义对象来保存你的数据。然后,您可以在该自定义对象上创建一个方法,将该对象的每个属性(字符串,数组,数字等)添加到POST字符串中。 – 2010-05-06 23:27:16

+0

非常感谢你!最后一件事情,如果你能帮助你知道我可以找到更多关于你的后置字符串的格式?我总是喜欢了解全文:) – Tristan 2010-05-07 00:36:00