3

我的获取请求仅在命令行 NSLog 中有效。我需要在标签中显示数据,但它不起作用。

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

3 回答 3

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

Real more here为什么我应该选择 GCD 而不是 NSOperation 和块用于高级应用程序?

于 2016-02-24T22:36:14.367 回答
1

虽然我不太确定这里的用途是什么......你正在使用@getString,我认为这是问题所在。您可能想要执行以下操作:

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

这应该具有与NSLog.

于 2016-02-24T22:35:52.743 回答
1
dispatch_async(dispatch_get_main_queue(), ^{
    [self.label setText:someString];
});
于 2016-02-25T01:40:51.233 回答