objective-c – NSURLSessionDataTask不执行完成处理程序块
发布时间:2020-12-16 06:45:03 所属栏目:百科 来源:网络整理
导读:我试图从我的本地节点服务器拉一些数据.服务器正在获取获取请求并记录它,但由于某种原因,我的iOS应用程序将不会执行任何我在完成处理程序中的代码.这是代码: - (IBAction) buttonPressed{NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:3000/"];NSU
我试图从我的本地节点服务器拉一些数据.服务器正在获取获取请求并记录它,但由于某种原因,我的iOS应用程序将不会执行任何我在完成处理程序中的代码.这是代码:
- (IBAction) buttonPressed{ NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:3000/"]; NSURLSessionDataTask *dataTask = [self.session dataTaskWithURL:url completionHandler:^(NSData *data,NSURLResponse *response,NSError *error){ nameLabel.text = @"yay!"; /* if (!error){ nameLabel.text = @"noerr"; NSHTTPURLResponse *httpResp = (NSHTTPURLResponse *)response; if (httpResp.statusCode == 200){ NSError *jsonErr; NSDictionary *usersJSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&jsonErr]; if (!jsonErr){ // nameLabel.text = usersJSON[@"username"]; nameLabel.text = @"nojerr"; } else{ nameLabel.text = @"jsonErr"; } } } else{ nameLabel.text = @"Err"; } */ }]; [dataTask resume]; } 当程序运行时,nameLabel不会更改为“yay”.但是,如果我尝试在NSURLSessionDataTask行之前更改nameLabel,它会发生更改. 解决方法
NSURLSessionDataTask在后台线程中运行.要更新用户界面中的任何内容,例如标签,按钮,表视图等,您必须在主线程上执行此操作.如果要从completionHandler块更新标签文本,则需要更新主线程中的标签,如下所示:
dispatch_sync(dispatch_get_main_queue(),^{ nameLabel.text = @"yay!"; }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |