我的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];
}
答案 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];
});