2012-01-23 3 views
3

Objective-C에 iPhone 앱을 쓰려고합니다. NSURLConnection을 사용하여 POST 데이터가 필요합니다. JSON을 다룰 수있는 모든 예가 나와 있습니다. JSON을 사용할 필요가 없습니다. 내가해야 할 일은 데이터를 POST하고 PHP 스크립트에서 간단한 1 또는 0 (성공 또는 실패)을 얻는 것입니다. 아무것도 더. POST with NSURLConnection - 아니요 JSON

가이 코드를 통해 온하지만 난 그것을 사용하거나 JSON 사용하지 않는 수정하는 방법을 잘 모르겠습니다 : 당신은 2.0 IOS를 대상으로하는 경우 다음과 같은있는 NSURLConnection의 방법을 사용할 수 있습니다

- (void)performRequest { 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL     URLWithString:@"http://someplace.com/"]]; 
    [request setValue:@"Some Value" forHTTPHeaderField:@"Some-Header"]; 
    [request setHTTPBody:@"{\"add_json\":\"here\"}"]; 
    [request setHTTPMethod:@"POST"]; 
    [NSURLConnection connectionWithRequest:[request autorelease] delegate:self]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
// Fail.. 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
// Request performed. 
} 

답변

2

을 - 4.3 (것 같습니다 5에서 더 이상 사용되지 않습니다.

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    NSString * string = [[NSString alloc] initWithData:data encoding: 
         NSASCIIStringEncoding]; 

    if (string.intValue == 1) { 

    } else { 

    } 
} 
+1

사실,이되지 아니에요. 비공식 프로토콜에서 공식 [NSURLConnectionDataDelegate 프로토콜] (http://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLConnectionDataDelegate_protocol/Reference/Reference.html#//apple_ref/occ/)로 변환되었습니다. intfm/NSURLConnectionDataDelegate/연결 : didReceiveData :). 이 일반적인 혼동을 피하기 위해 [NSURLConnectionDelegate Protocol] (https://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html) 문서를이 다른 참조 문서에 링크 해 주시기 바랍니다. – Rob

14

다음은 일반 게시물을 만드는 방법입니다. 이 같은

NSURL *URL = [NSURL URLWithString:@"http://example.com/somepath"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 
request.HTTPMethod = @"POST"; 
이제

URL로 인코딩 된 문자열로 게시물 데이터를 포맷 :

NSString *params = @"param1=value1&param2=value2&etc..."; 

하는 퍼센트를 사용하여 개별 매개 변수를 인코딩하는 것을 잊지

먼저 올바른 유형의 요청을 만들 부호화. 당신은 전적으로 NSString stringByAddingPercentEscapesUsingEncoding 메서드 (구글 이유를 찾을 수)에 의존 할 수는 없지만 좋은 시작이다.

이제 우리는 귀하의 요청에 포스트 데이터를 추가 :

NSData *data = [params dataUsingEncoding:NSUTF8StringEncoding]; 
[request addValue:@"8bit" forHTTPHeaderField:@"Content-Transfer-Encoding"]; 
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request addValue:[NSString stringWithFormat:@"%i", [data length]] forHTTPHeaderField:@"Content-Length"]; 
[request setHTTPBody:data]; 

그리고 지금은 그냥있는 NSURLConnection (또는 무엇이든)를 사용하여 정상적으로 요청을 보내, 그것 뿐이다.

되돌아 오는 응답을 해석하려면 Maudicus의 대답을 참조하십시오.

+0

Xcode 5.1.1에서는 다음 줄을 생성하는 수정 사항을 제공했습니다 .HTTPHeaderField : @ "Content-Length"];'에 대한 [요청 addValue : [NSString stringWithFormat : @ "% lu", (부호없는 길이) [데이터 길이]]. 'unsigned long'에 명시 적 캐스트를 추가하고'% i'을'% lu'로 변경했습니다. 설명을 보려면 [이 질문] (http://stackoverflow.com/q/22671347/642706)을 참조하십시오. –

0

나는 whitebreadb와 매우 비슷한 상황이 있습니다. 나는 제출 된 답변에 동의하지 않지만 여기 제공된 코드가 제게 적합하지 않기 때문에 내 자신의 글을 게시하고 싶습니다 (내 PHP 스크립트는 제출 된 매개 변수를 길이가 0 인 문자열로보고했습니다) 그러나 나는 이것을 찾았습니다 question 그것은 도움이되었습니다.

나는 내 PHP 스크립트에 게시물을 수행하려면이 옵션을 사용 :

NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.myphpscriptlocation.net/index.php?userID=%@",self.userID_field.stringValue]]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 
request.HTTPMethod = @"POST"; 
NSURLConnection *c = [NSURLConnection connectionWithRequest:request delegate:self];