2014-01-22 4 views
0

웹 서비스 API에서 데이터를 다운로드하고 있습니다. 많은 프로젝트에서 다른 API를 사용하여 데이터를 다운로드해야합니다. 따라서 Iam이 웹 서비스를 호출하는 곳마다 복잡성이 있습니다. 코드iOS에서 NSMutableURLRequest 및 NSURLConnection 관리하기

- (void)downloadInvitedVcards 
{ 
    AppManager *oAppManager = [AppManager getSharedInstance]; 
    [oAppManager hasreachabilityChanged]; 
    if (oAppManager.currentConnectivity) { 
     //NSString *deviceUDID = oAppManager.deviceID; 

     NSArray *keys = [NSArray arrayWithObjects:@"UserName",@"PMobileNo",nil]; 
     NSArray *objects = [NSArray arrayWithObjects:oAppManager.userName,oAppManager.mobileno,nil]; 
     NSData *_jsonData = nil; 
     NSString *_jsonString = nil; 


     NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

     if ([NSJSONSerialization isValidJSONObject:jsonDictionary]) { 
      _jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:0 error:nil]; 
      _jsonString = [[NSString alloc] initWithData:_jsonData encoding:NSUTF8StringEncoding]; 

     } 

     NSString *newUrl = oAppManager.loginURL; 
     NSString *appendUrl = [newUrl stringByAppendingString:@"/DownloadInvitedVcards"]; 

     NSURL *aUrl = [NSURL URLWithString:appendUrl]; 

     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl]; 
     [request setHTTPMethod:@"POST"]; 
     [request setHTTPBody:_jsonData]; 
     [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
     [request setValue:[NSString stringWithFormat:@"%d",[_jsonData length]] forHTTPHeaderField:@"Content-Length"]; 

     NSError *errorReturned = nil; 
     NSURLResponse *theResponse = [[NSURLResponse alloc] init]; 
     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&errorReturned]; 

     if (errorReturned) 
     { 
      NSLog(@"Error %@",errorReturned); 
     } 
     else { 
      NSString *responseString = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
      NSLog(@"%@",responseString); 

      NSArray *responseData = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
      for (NSDictionary *resultData in responseData) { 
       NSLog(@"Value :%@",resultData); 
      } 
     } 
    } 

} 

언제 어디서나 동일한 프로세스를 수행하지만 API 메소드는 변경해야합니다. 그것은 잘 작동하지만 더 많은 코드와 복잡성을 증가시킵니다. 이것을 달성하기위한 더 좋은 방법이 있습니까?

+1

그래서 문제가 무엇입니까? public 메서드 (매개 변수)를 사용하여 클래스 파일을 만들고 원하는 곳 어디에서나 호출하십시오. –

답변

0

당신의 문제처럼 들리 겠지만, 하나 이상의 코드가 하나의 디자인입니다. 나는 서버와의 요청을 간단히 관리하는 일을하는 하나의 클래스를 만드는 방법을 살펴볼 것이다. 요청을 만드는 모든 메커니즘을 정리하고 결과를 직렬화합니다. 그러면 나머지 응용 프로그램은 원하는 데이터를 검색하여 서버에 요청을 전달하기 만하면됩니다.

+0

응답 데이터를 반환하는 매개 변수 JsonDictionary 및 ApIMethod가있는 메서드를 호출해야합니다. NSDictionary * responseData = [[NSURLManager getSharedInstance] getResponseAPI : jsonDictionary andAPT : @ "/ DownloadQRCode"]; 이 올바른 수행 방법입니다. –

+0

IT에서 "올바른"방법이 없습니다. 내가 아는 모든 프로그래머는 다른 것을합니다. 그러나 유지하기 쉽거나 확장하기 쉬운 것들을하는 방법이 있습니다. 이것은 디자인 패턴이 들어오는 곳으로, 당신이보다 견고한 소프트웨어를 작성하는데 도움이되는 개념을 제공합니다. 언급 한 솔루션은이 문제를 해결할 수있는 방법과 유사합니다. 그것은 모든 보일러 플레이트 코드를 메서드 안에 포함합니다. KVC를 사용하여 반환 데이터가있는 클래스를 채우는 것이 좋습니다. – drekka