Return 来自异步 BLOCK 的 NSArray 函数
Return NSArray function from asynchronous BLOCK
我有一个函数必须有这个签名并且必须return一个测试对象数组
+ (NSArray <Test *>*_Nullable) getAllDetails
在函数中,我正在使用 RESTKIT 异步执行 GET 请求,它成功地从远程 REST API 获取数据并保存到我在此处 return 的数组中。因为当我在其他地方用 [MyClass getAllDetails];
函数调用 class 时,块之前的函数 returns 已经执行,所以我的测试对象数组为 nil 但是当我在调用中登录时,数组被填充.有一段时间我已经完成了一些 OJB-C 和块。
如果您异步获取数据,这是一种错误的方法,您应该使用块方法或创建委托方法来处理响应。
你可以试试这样的块方法
//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);
}
}
}
我有一个函数必须有这个签名并且必须return一个测试对象数组
+ (NSArray <Test *>*_Nullable) getAllDetails
在函数中,我正在使用 RESTKIT 异步执行 GET 请求,它成功地从远程 REST API 获取数据并保存到我在此处 return 的数组中。因为当我在其他地方用 [MyClass getAllDetails];
函数调用 class 时,块之前的函数 returns 已经执行,所以我的测试对象数组为 nil 但是当我在调用中登录时,数组被填充.有一段时间我已经完成了一些 OJB-C 和块。
如果您异步获取数据,这是一种错误的方法,您应该使用块方法或创建委托方法来处理响应。
你可以试试这样的块方法
//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);
}
}
}