2015-10-05 119 views
0

我有dataTaskWithRequest的問題,我想填充一個變量,當我調用一個使用dataTaskWithRequest的方法。但它似乎不填充,因爲當我後來把這個變量,它的零Objective-C dataTaskWithRequest填充變量同步

這裏是方法:

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

         } 


        }]; 

我想填充變量名稱當我在任何地方放置斷點時,我都可以看到它被填充,與結果相同,但是當我嘗試在此處稱呼它時:

[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?當我有多個電話時,我覺得這種方式有點慢。或者,以後可以使用變量名稱嗎?我很困擾。我真的很想念sendSynchronousRequest,我發現速度更快,更好。

回答

0

爲了避免零確保您在初始化變量,如果兩者else塊:

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

如果[result count] == 0,那麼你需要做的那個方向調試。