如何在继续执行之前等待方法内的任务

时间:2016-02-18 06:48:55

标签: ios objective-c grand-central-dispatch semaphore dispatch-async

我有一个类(假设名为' A'),其中包含NSURLSessionDataTaskNSDictionary属性的方法。我将JSON响应添加到NSDictionary属性。在我的mainViewController中,我创建了一个A类对象并调用了该方法。现在在mainViewController我需要访问A类的NSDictionary。现在问题是在调用A类中的方法之后,我需要在访问{之前添加[NSThread sleepForTimeInterval:5.0]; {1}}或字典为空。我在访问字典之前尝试了这个,但它没有工作

NSDictionary

任何帮助将不胜感激,谢谢。

P.S:我在SO上遇到过类似的问题,但没有发现任何线索。

1 个答案:

答案 0 :(得分:1)

花了几个小时试图解决问题后,我会回答我自己的问题,以便像我这样的新手能够受益。与Paulw11提到的一样,我使用了一个完成处理程序块,并声明完成处理程序阻止了A类的.h文件:

typedef void(^myCompletion)(BOOL);

然后我将块作为参数传递给方法:

- (void) requestAPIMethod : (myCompletion) compBlock;

然后在你的方法定义中确保你这样做:

compBlock(YES);

这必须在您需要完成的所有处理之后完成。 然后在我的mainViewController.m中我创建了一个A类对象,然后所有等待的代码进入了内部:

[classAObject classAMethod:^(BOOL isSuccess) {
if(isSuccess) {
// code that was waiting for the method to complete execution
    }
}];

希望这有帮助。