2010-05-05 3 views
0

현재 .Net 앱을 Objective C 및 Cocoa로 이식하려고합니다. 나는 기초를 알고 대부분의 일에 거의 문제가 없었다. 하지만 웹에서 데이터를 가져 오는 데 문제가 있습니다..Net HttpWebRequest/Response 코코아 Equivelant

C#에서 내가 POST를 사용하고 같은

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

같은 서버에서 정보를 검색하는 GET하지만 난 많은 행운 코코아 equivelant을 찾는 데 아니에요 것입니다. NSUrlDownload 같은 것들을 사용하는 것을 보았습니다. 그러나 모든 예제는 항상 단일 블로킹 함수 호출로 데이터 다운로드를 보여줍니다. 필요한 것은 데이터를 수신 할 때 업데이트 할 수 있어야합니다. 모든 정보가 도착할 때까지 기다리지 않고 데이터를 처리해야합니다. 이상적으로는 텍스트 나 바이너리와 같은 여러 유형의 데이터를 처리 할 수 ​​있기 때문에 어떤 파서에 전달할 수있는 스트림과 비슷한 것이 필요합니다.

제 질문은 위의 C# 코드와 동일합니다.

답변

3

NSURLConnection을 사용하고 해당 대리인으로 개체를 할당해야합니다. 연결이 데이터를 수신하면 -connection:didReceiveData: 대리자 메서드를 호출하여 필요에 따라 들어오는 데이터를 처리하는 데 사용할 수 있습니다.

직접 HTTP POST 요청을 작성해야합니다. this question에 대한 내 응답에서이 작업을 수행하는 방법을 보여주는 코드를 게시했습니다.

+0

PHP 스크립트에 문자열 배열을 보내려면 메서드를 사용하고 싶었는데 사용하는 사전을 어떻게 관리 할 수 ​​있었습니까? – Tristan

+0

동일한 이름 (nameOfKey []')을 가진 여러 값이 필요하기 때문에 PHP 배열을 게시하는 것이 약간 어렵습니다. 분명히 'NSDictionary'는 같은 이름의 키를 여러 개 가질 수 없으므로 데이터를 보관할 사용자 정의 객체를 만들고 싶을 것입니다. 그런 다음 해당 객체 (문자열, 배열, 숫자 등)의 각 속성을 POST 문자열에 추가하는 해당 사용자 정의 객체에 메서드를 만들 수 있습니다. –

+0

우수 감사합니다. 마지막으로 한 가지만 들자면 포스트 문자열을 입력하는 형식에 대해 더 많이 알 수 있습니다. 나는 항상 전체 이야기를 알고 싶다. :) – Tristan