2016-07-08 15 views
1

我已經嘗試過這種方法,我想了解其餘APIiOS的整合。 我想了解有關JSON在Web服務中的解析。我知道這些方法,但如何使用它?但每種方法的功能是什麼?如何在iOS中使用NSURLConnection集成rest API?

此IBAction方法向服務器發送註冊請求字符串。

-(void)genSignup 
{ 
responseData = [NSMutableData data]; 
urlLoc= [urlLoc stringByAppendingString:service]; 
NSLog(@"%@",requestString); 

    NSData *postData = [requestString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]]; 
    request = [[NSMutableURLRequest alloc] init]; 

    [request setURL:[NSURL URLWithString:urlLoc]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 

    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData]; 
    //NSLog(@"%@",request); 

    PostConnectionRegisterGenUser = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

} 
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [responseData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [responseData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    [MyClass removePregressIndicator:self.view]; 

} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
     [MyClass removePregressIndicator:self.view]; 
    if (connection == PostConnectionRegisterGenUser) 
    { 
     NSError *error; 
     NSDictionary *results = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 
     NSLog(@"%@",results); 

    } 
} 

如何使用它?

+0

你在尋找一個解決問題/崩潰/錯誤或一些文檔的鏈接/引導? – ddb

+0

檢查此http://codewithchris.com/tutorial-how-to-use-ios-nsurlconnection-by-example/ – 7vikram7

+0

NSURLConnection已棄用有效的Mac OS 10.11和iOS 9.因此,此時應使用NSURLSession代替NSURLConnection的。正如NSURLConnection.h頭文件所示: 不推薦使用:不應再使用NSURLConnection類。 NSURLSession是NSURLConnection的替代品。 –

回答

0

另一種選擇Nsurlsession:

-(void)Fetchdata 
{ 


    NSURLSessionConfiguration *defaultSessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration:defaultSessionConfiguration]; 

    // Setup the request with URL 
    NSURL *url = [NSURL URLWithString:@"http://52.2/category_list.php"]; 
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; 

    // Convert POST string parameters to data using UTF8 Encoding 
    NSString *postParams = @"admin_id=19"; 
    NSData *postData = [postParams dataUsingEncoding:NSUTF8StringEncoding]; 

    // Convert POST string parameters to data using UTF8 Encoding 
    [urlRequest setHTTPMethod:@"POST"]; 
    [urlRequest setHTTPBody:postData]; 

    // Create dataTask 
    NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 

     NSDictionary *results = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
     NSLog(@"%@",results); 
     arryTempdata = [[results valueForKey:@"message"] valueForKey:@"banner"]; 

     NSLog(@"%@",arryTempdata); 

     tblV.reloadData; 

    }]; 

    // Fire the request 
    [dataTask resume]; 
} 
+0

http://hayageek.com/ios-nsurlsession-example/ –

1

NSURLConnection已棄用有效Mac OS 10.11iOS 9。所以,在這一點上應該使用NSURLSession而不是NSURLConnection

我只是在您的代碼中添加NSURLSession。相應地更改密鑰,URL。我沒有編譯它。

NSString * requestString = [NSString stringWithFormat:@"Name=%@&Email=%@&Password=%@&MobileNumber=%@&BloodGroup=%@&DeviceID=%@&City=%@&DeviceType=I",txtName.text,txtEmail.text,txtPassword.text,txtMobileno.text,strBlood,strDeviceID,txtCity.text]; 
    NSData *postData = [requestString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:urlLoc]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData]; 

    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    sessionConfiguration.HTTPAdditionalHeaders = @{ @"api-key": @"API_KEY"}; 

    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration]; 

    NSURLSessionDataTask *sessionPostDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
     // The server answers with an error because it doesn't receive the params 
    }]; 
    [sessionPostDataTask resume]; 

如果您需要任何其他信息,請告訴我。

希望這會幫助你!

+0

@親愛的請接受答案,如果它可以幫助你。 TIA。 –

0

對NSURLSession WS調用使用簡單的常用方法。

-(void)callWebserviceWithParams:(NSDictionary *)aParams withURL:(NSString *)aStrURL withTarget:(UIViewController *)aVCObj withCompletionBlock:(void(^)(NSMutableDictionary *aMutDict))completionBlock withFailureBlock:(void(^)(NSError *error))failure 
{ 

     NSString *aStrParams = [self getFormDataStringWithDictParams:aParams]; 

     NSData *aData = [aStrParams dataUsingEncoding:NSUTF8StringEncoding]; 

     aStrURL = [aStrURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

     NSMutableURLRequest *aRequest = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:aStrURL]]; 
     [aRequest setHTTPMethod:@"POST"]; 
     [aRequest setHTTPBody:aData]; 


     NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
     NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:nil delegateQueue:nil]; 
     [aRequest setHTTPBody:aData]; 

     NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:aRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
      // 
      if (error ==nil) { 
       NSString *aStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 
       NSLog(@"ResponseString:%@",aStr); 
       NSMutableDictionary *aMutDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 
       aMutDict = [aMutDict dictionaryByReplacingNullsWithBlanks]; 
       dispatch_async(dispatch_get_main_queue(), ^{ 

         completionBlock(aMutDict); 

       }); 
      } 
      else 
      { 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        failure(error); 
       }); 
      } 
     }]; 

     [postDataTask resume]; 

} 


-(NSString *)getFormDataStringWithDictParams:(NSDictionary *)aDict 
{ 
    NSMutableString *aMutStr = [[NSMutableString alloc]initWithString:@""]; 
    for (NSString *aKey in aDict.allKeys) { 
     [aMutStr appendFormat:@"%@=%@&",aKey,aDict[aKey]]; 
    } 
    NSString *aStrParam; 
    if (aMutStr.length>2) { 
     aStrParam = [aMutStr substringWithRange:NSMakeRange(0, aMutStr.length-1)]; 

    } 
    else 
     aStrParam = @""; 

    return aStrParam; 
} 

使用這樣

NSDictionary* param = @{ 
          @"Key1":@"Value1", 
          @"Key2":@"value2" 
          }; 


    [self callWebserviceWithParams:param withURL:@"URL String" withTarget:self withCompletionBlock:^(NSMutableDictionary *aMutDict) { 
     //code For Success 

    } withFailureBlock:^(NSError *error) { 
     // code for WS Responce failure 
    }]; 

也必須設置在NSObject類此方法,使之簡單,在整個應用程序中使用。