繁体   English   中英

如何在iOS中集成NSUrlsession

[英]How to integrate NSUrlsession in ios

嗨,我是ios的新手,在我的应用程序中,我使用NSUrlSession集成服务。

这是我的主要问题,是当我从服务器收到响应时,无法正确处理它们。

当我得到正确的响应时,请参见以下json结构:-

responseObject = {

           {
            Name = Broad;
            DeptNo = A00;
            BatchNo = 23;
            DeptId = 120;
          },

          {
            Name = James;
            DeptNo = B00;
            BatchNo = 23;
            DeptId = 123;
          },
     }

当我收到错误的响应时,请参见以下json结构:-

responseObject = {

    error = 1;
    message = "Invalid Code";
}

当我从服务器收到正确的响应时,我在下面的if block(like __NSCFArray objectForKey:]: unrecognized selector sent to instance 0x1611c200')收到异常if block(like __NSCFArray objectForKey:]: unrecognized selector sent to instance 0x1611c200') ,当我收到错误的响应时,T会在else block获取异常

请帮我如何处理

我的代码:

 (void) GetCallService1: (id)MainResponse{

    dispatch_async(dispatch_get_main_queue(), ^{

        NameArray = [[NSMutableArray alloc]init];
        IdArray = [[NSMutableArray alloc]init];


            if([MainResponse objectForKey:@"error"] != nil)
            {
                NSLog(@"No data available");
            }
            else{
        for (NSDictionary *obj in MainResponse) {

            if([obj objectForKey:@"Name"] && [obj objectForKey:@"DeptNo"])    {

                NSString * Name = [obj objectForKey:@"Name"];
                [NameArray addObject:Name];
                NSString * Id = [obj objectForKey:@"id"];
                [IdArray addObject:Id];
            }
           }
        }
    });
}

1)如下更改您的实现

2)我检查字典类型和错误键是否有一定价值

3)之前您在Array上调用objectForKey,因此它崩溃了

-(void) GetCallService1: (id)MainResponse{

    dispatch_async(dispatch_get_main_queue(), ^{

        NameArray = [[NSMutableArray alloc]init];
        IdArray = [[NSMutableArray alloc]init];
        //here I checked is it dictionary type & error key has some value
        if ([MainResponse isKindOfClass:[NSDictionary class ]] &&[MainResponse objectForKey:@"error"])
        {        
            NSLog(@"No data available");
        }
        else{
            for (NSDictionary *obj in MainResponse) {

                if([obj objectForKey:@"Name"] && [obj objectForKey:@"DeptNo"])    {

                    NSString * Name = [obj objectForKey:@"Name"];
                    [NameArray addObject:Name];
                    NSString * Id = [obj objectForKey:@"id"];
                    [IdArray addObject:Id];
                }
            }
        }
    });
}

尝试这个:

//Result Block
typedef void (^ResultBlock)(id, NSError*);

//URL request
-(void)requestURL:(NSURLRequest *)request withResult:(ResultBlock)resultHandler{

//URLSession
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * data, NSURLResponse * response, NSError * error) {
if(!error){
  NSError *jsonError = nil;
  id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError];


  if([result isKindOfClass:[NSArray class]]){
   //Success
    resultHandler(result,nil);
  }
  else if([result isKindOfClass:[NSDictionary class]]){

   if([[result objectForKey:@"error"] integerValue]){

   //Failure. 
   NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary];

  [errorDetail setValue:[result objectForKey:@"message"]    forKey:NSLocalizedDescriptionKey];

  NSError *error = [NSError errorWithDomain:@"Error" code:100 userInfo:errorDetail];

    resultHandler(nil, errorDetail);
    }
  }
}
}];
[task resume];

}

//Call your requestURL method:
[self requestURL:request withResult:^(id result, NSError *error){
if(!error){
//Success, Read & update your list
}
else{
//Error 
// NSLog(error.localizedDescription());
}
}];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM