在目标c

时间:2018-04-04 15:15:13

标签: objective-c api nsurlsession nsurlsessiondatatask

我正在尝试使用来自server的值来加载表的数据。我正在使用带有完成处理程序的NSURLSession数据任务。每当它到达nsurlsession时,它都会显示错误。这是我用来获取数据的代码。

- (void)geturl:(NSString *)urlvalue datavalues:(NSString *)string fetchGreetingcompletion:(void (^)(NSDictionary *dictionary, NSError *error))completion{

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@?%@",common.getUrlPort,urlvalue,common.getappversion]];
NSLog(@"url=%@",url);

NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];

NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[urlRequest addValue:common.getauthtoken forHTTPHeaderField:@"Authorization"];
//Create POST Params and add it to HTTPBody
[urlRequest setHTTPMethod:@"GET"];

NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest
                                                   completionHandler:^(NSData *data, NSURLResponse *response, NSError *connectionError) {
                                                       NSLog(@"Response:%@ %@\n", response, connectionError);                                                        




    if (data.length > 0 && connectionError == nil)
   {
       NSDictionary *greeting = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
       NSString *code = [NSString stringWithFormat:@"%@",[greeting valueForKey:@"code"]];
       if([code isEqualToString:@"-1"]){
           [self loaderrorview:greeting];
       }
       else{
           if (completion)
               completion(greeting, connectionError);
       }
   }
   else if(data == nil){
       NSDictionary *errorDict=[[NSDictionary alloc]initWithObjectsAndKeys:@"Server Connection Failed",@"error", nil];
       if (completion)
           completion(errorDict,connectionError);
   }
   else
   {
       NSDictionary *greeting = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
       if (completion)
           completion(greeting, connectionError);
   }
    }];
    [dataTask resume];
}

我用来从服务器获取数据的代码:

-(void)getdataexplore{
    if (!common.checkIfInternetIsAvailable) {
        [self.view makeToast:Nointernetconnection];
    } else {
        NSLog(@"There is internet connection");
        [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
        [SVProgressHUD showWithStatus:@"Loading..."];

        [apiservice geturl:loadexploredata datavalues:nil fetchGreetingcompletion:^(NSDictionary *dictionary, NSError *error) {
            //NSLog(@"Test %@ Error %@",dictionary,error);
            if(error == nil){
                authDictionary = dictionary;
                [self loaddata];
            }
            else{
                [SVProgressHUD dismiss];
                [view_business makeToast:@"Request timed out" duration:2.0 position:CSToastPositionCenter];
            }
        }];
    }
}

我用于将服务器数据存储到数组的代码:

-(void)loaddata
{
    [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
    [SVProgressHUD showWithStatus:@"Loading..."];
    //[SVProgressHUD dismiss];
    NSString *msg = [authDictionary valueForKey:@"msg"];
    NSString *code = [NSString stringWithFormat:@"%@",[authDictionary valueForKey:@"code"]];
    if([code isEqualToString:@"201"]){
        NSDictionary *explore = [authDictionary valueForKey:@"explore_obj"];
        arr_CBcategories = [explore valueForKey:@"cb_categories"];
        [common setarrCBCaterory:arr_CBcategories];
        arr_CBcategoryid = [arr_CBcategories valueForKey:@"id"];
        [common setarrCateroryID:arr_CBcategoryid];
        arr_CBcategorytitle = [arr_CBcategories valueForKey:@"title"];
        [common setarrCaterorytitle:arr_CBcategorytitle];
        arr_CBcategoryslug = [arr_CBcategories valueForKey:@"slug"];
        [common setarrCateroryslug:arr_CBcategoryslug];
        arr_CBcategoryimage = [arr_CBcategories valueForKey:@"image"];
        [common setarrCateroryimage:arr_CBcategoryimage];
        arr_CBcategorycode = [arr_CBcategories valueForKey:@"code"];
}

我收到错误,如#34;无法运行主线程"。任何解决方案。

0 个答案:

没有答案