从异步BLOCK返回NSArray函数

时间:2018-09-25 16:07:55

标签: objective-c return nsarray objective-c-blocks

我有一个必须具有此签名并且必须返回Test对象数组的函数

+ (NSArray <Test *>*_Nullable) getAllDetails

在函数中,我正在使用RESTKIT异步执行GET请求,该请求从远程REST API成功获取数据并将其保存到我在这里返回的数组中。因为当我使用[MyClass getAllDetails];函数在其他地方调用该类时,该函数将在执行块之前返回,所以我的Test对象数组为nil,但是当我在该调用中登录时,将填充该数组。一段时间以来,我已经完成了一些OJB-C和块操作。

1 个答案:

答案 0 :(得分:1)

如果您异步获取数据,则应该使用块方法或创建委托方法来处理响应,这是错误的方法。

您可以尝试使用这种阻止方法

//Declare your block like this in your class
typedef void (^GetAllRequestBlock)(NSArray <Test *>*_Nullable);

并在您的函数中使用它,例如:-

+ (void)getAllDetails:(GetAllRequestBlock)completionHandler{
    BOOL response = true; // Your api response check
    if (response) {
        if completionHandler{
            completionHandler(Array); // Pass your array custom array that you've defined in the block
        }
    }else{
        if completionHandler{
            completionHandler(nil);
        }
    }
}