Как показать запрос GET в Label

Мой запрос на получение работает только в командной строке NSLog. Мне нужно показать данные в Label, но это не работает.

-(void)getRequest{

  NSURLSessionConfiguration *getConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
  NSURLSession *getSession = [NSURLSession sessionWithConfiguration: getConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];
  NSURL * getUrl = [NSURL URLWithString:@"http://localhost:3000/get"];
  NSURLSessionDataTask * getDataTask = [getSession dataTaskWithURL:getUrl completionHandler:^(NSData *getData, NSURLResponse *getResponse, NSError *getError) {
    if(getError == nil){
       NSString * getString = [[NSString alloc] initWithData: getData encoding: NSUTF8StringEncoding];
       [self.label setText:getString];// doesn't work!
       NSLog(@"Data = %@",getString);}//  it works!!
       MainViewController*l=[[MainViewController alloc]init];

       [l getRequest];
    }
 ];

 [getDataTask resume];
}

person Evgenii    schedule 24.02.2016    source источник
comment
Можете ли вы проверить, является ли ваш ярлык нулевым или нет? Поместив NSLog(@"Data = %@", self.label); в блок   -  person Inder Kumar Rathore    schedule 25.02.2016


Ответы (2)


dataTaskWithURL не работает в основном потоке, и это необходимо для обновления пользовательского интерфейса.

if (getError == nil) {
    NSString * getString = [[NSString alloc] initWithData: getData encoding: NSUTF8StringEncoding];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.label setText: getString];
        NSLog(@"Data = %@", getString);

    });

    }

Этот код будет работать нормально для вас.

Вы также можете использовать:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    [self.label setText:getString];       
}];

Подробнее здесь >Почему мне следует выбирать GCD, а не NSOperation и блоки для высокоуровневых приложений?

person Matz    schedule 24.02.2016

Хотя я не совсем уверен, какое использование будет здесь ... вы используете @getString, что, я думаю, является проблемой. Вы, вероятно, хотите сделать что-то вроде:

[self.label setText:[NSString stringWithFormat:"Data = %@", getString];

Это должно иметь то же поведение, что и NSLog.

person BHendricks    schedule 24.02.2016