如何在Label中显示GET请求

时间:2016-02-24 22:25:44

标签: ios objective-c uilabel get-request

我的get请求仅适用于命令行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];
}

3 个答案:

答案 0 :(得分:2)

dataTaskWithURL 无法在主线程上运行,而且需要更新您的UI。

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

真实更多Why should I choose GCD over NSOperation and blocks for high-level applications?

答案 1 :(得分:1)

虽然我不太确定这里的用法是什么......你正在使用@getString,我认为这是问题所在。你可能想做类似的事情:

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

这应该与NSLog具有相同的行为。

答案 2 :(得分:1)

dispatch_async(dispatch_get_main_queue(), ^{
    [self.label setText:someString];
});