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

How to integrate rest API using NSURLConnection in iOS?

我试过这个方法,我想知道iOS中rest API的整合。 我想了解 Web 服务中的 JSON 解析。我知道这些方法,但如何使用呢?但是每个方法的功能是什么?

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

    }
}

如何使用?

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];

如果您需要任何其他信息,请告诉我。

希望对您有所帮助!!!

使用简单的常用方法进行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 Class 中设置此方法并使其简单并在整个应用程序中使用。

另一个选项 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];
}