繁体   English   中英

Objective-C dataTaskWithRequest填充变量同步

[英]Objective-C dataTaskWithRequest populate variable Synchronous

我在使用dataTaskWithRequest时遇到麻烦,我试图在填充使用dataTaskWithRequest的方法时填充变量。 但它似乎没有填充,因为稍后我调用此变量时,它的值为nil

方法如下:

-(void)deviceCheck:(NSString *)device Completetion:(void (^) (NSArray * result,NSError * error))completion{
    NSString *deviceRequestString = [NSString stringWithFormat:@"%@?device=%@",webservice,device];
    NSURL *JSONURL = [NSURL URLWithString:deviceRequestString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:JSONURL];
    NSURLSessionDataTask * dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request
                                                                      completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                                                                          if(data == nil){
                                                                              completion(nil,error);
                                                                              return;
                                                                          }
                                                                          NSError *myError;
                                                                          NSArray *tableArray = [[NSArray alloc]initWithArray:[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&myError]];
                                                                          completion(tableArray,myError);
                                                                      }];
    [dataTask resume];
}

这就是我所说的:

[self deviceCheck:@"testunitid" Completetion:^(NSArray *result, NSError *error) {

                        if([result count] == 0){

                            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Message" message:@"Device is not valid." preferredStyle:UIAlertControllerStyleAlert];

                            UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
                            [alertController addAction:ok];

                            [self presentViewController:alertController animated:YES completion:nil];

                        }else{

                            scanner=[DTDevices sharedDevice];
                            [scanner addDelegate:self];
                            [scanner connect];

                            Name = [[result objectAtIndex:0] objectForKey:@"name"];

                            Name = [Name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

                            Name = [Name stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

                        }


                    }];

我正在尝试填充变量Name当我到处都放置断点时,我可以看到它正在填充,与结果相同,但是当我尝试在此处调用它时:

[self getLocationInfo:Name Completetion:^(NSArray *result, NSError *error) {

            if([result count] == 0){

                UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Message" message:@"There is an issue with the location tag." preferredStyle:UIAlertControllerStyleAlert];

                UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
                [alertController addAction:ok];

                [self presentViewController:alertController animated:YES completion:nil];

                ScannerMessage.text = @"READY TO SCAN";
                ScannerMessage.backgroundColor = [UIColor greenColor];

            }else{

                [self performSegueWithIdentifier: @"SegueIdentifier" sender: self];

            }

        }];

其零

有没有更好的方法来使用dataTaskWithRequest? 当我有多个通话时,我发现这种方式有点慢。 还是可以稍后使用变量Name? 我很困扰。 我真的很想念sendSynchronousRequest我发现它越来越好。

为了避免nil,请确保在两个if else块中都初始化了变量:

if([result count] == 0){
   Name = @"[result count] == 0";
}else{
   //populate names
}

如果[result count] == 0则必须在该方向上进行调试。

暂无
暂无

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

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