如何在iOS中使用NSURLConnection集成rest API?

问题描述:

我已经尝试过这种方法,我想了解其余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的替代品。 –

另一种选择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/ –

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。 –

对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类此方法,使之简单,在整个应用程序中使用。