Вернуть функцию NSArray из асинхронного BLOCK - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть функция, которая должна иметь эту подпись и должна возвращать массив объектов Test

+ (NSArray <Test *>*_Nullable) getAllDetails

Внутри функции я выполняю запрос GET с использованием RESTKIT асинхронно, который успешно извлекает данные из удаленного RESTAPI и сохранение в массив, который я возвращаю сюда.Поскольку функция возвращается до выполнения блока, когда я вызываю класс где-то еще с помощью функции [MyClass getAllDetails];, мой массив объектов Test равен нулю, однако, когда я регистрируюсь в вызове, массив заполняется.Давным-давно я сделал несколько OJB-C и блоков по этому вопросу.

1 Ответ

0 голосов
/ 26 сентября 2018

Это неправильный подход, если вы выбираете данные асинхронно, вы должны использовать блочный подход или создать метод делегата для обработки ответа.

Вы можете попробовать блочный подход следующим образом

//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);
        }
    }
}
...