GCD NSURLSession completionHandler块返回值为null

时间:2016-02-21 02:29:35

标签: ios objective-c task grand-central-dispatch completionhandler

我有标签视图 这些标签在viewdidload时会有一个新值 在viewdidload中有调用2个方法。 第一个将从另一个类调用a方法,该方法将具有NSURLSessionDataTask,其将具有completionHandler块。 我想将会话NSHTTPURLResponse中的这些标签的新值设置为字典对象。 问题是,当视图加载时,标签的值为null。 我知道这是因为视图在第一个完成之前调用了一个方法,这就是块!

我不知道如何使第一个方法完成,然后调用第二个方法。

我试图这样做

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // 1
[AnotherClass method:argu anotherArgu:argue2]; // calling the method from the otherclass, this method have completionHandler block
_curentObj = [AnotherClass currentObje]; 
dispatch_async(dispatch_get_main_queue(), ^{ // 2
[self setupUserLabel]; // 3 this method will set the new value for the label from _currentObj but it's null
});
});

我不知道如何完成第一次调用[AnotherClass method:argu anotherArgu:argue2];然后完成并完成调用viewdidload中的另一个调用。 请帮忙 感谢

1 个答案:

答案 0 :(得分:1)

你需要调整自己的想法。您的结果可能无法在viewDidLoad中使用。相反,你启动NSURLSessionDataTask,在完成处理程序中,你得到你想要的结果,根据需要格式化它们,然后在完成块内调用dispatch_async(dispatch_get_main_queue())进行UI更改

在后台线程上调用完成块,执行准备工作,然后使用dispatch_async调用代码将新数据安装到主线程的UI中。