Извлечение данных за пределы функции Alamofire


#1

Добрый день

Попытался воспользоваться библиотекой Alamofire, данные получил, все хорошо.
К сожалению при попытке использовать полученные данные я столкнулся со следующей проблемой:

Собственно я хочу распихать полученные данные по массивам, используя цикл, но компилятор упорно требует прописать self. после чего, я не могу получить доступ к данным.
При этом если прописать - ругаться перестает, но при запуске вылетает ошибка Index out of range.

Раньше я подобные проблемы решал объявляя public переменную, и передавая данные туда, но сейчас, почему-то не выходит.

Может у кого есть идеи как извлечь данные для работы с ними?
Спасибо


#2

ети complite блоки испольняються в другом потоке .Кажись ви пока правильно делаете - извлекаете дание - потом нада пригнуть в главний поток
например так - DispatchQueue.main.async {
self.tableView.reloadData()
print(“Dispatch Async”)
}
и обновить дание таблици и… переменние лутше обявлять с маленькой букви


#3

А в какой именно момент это надо применить?

После извлечения данных и перед нарезкой JSON, верно?


#4

в етом блоке сначала идет парсинг данних ( извлекаете все что ван нужно) и записиваете в переменние ( через селф) с которими работает таблица и только потом в самом конце обращаетесь к main очереди и обновляете вашу таблицу


#5

Хм

Но тогда остается проблема ошибки “Index out of range”.

Не может быть дело в том, что я просто создал пустые массивы вот так: public var PostName = String? Не надо указывать количество элементов?


#6

ну нада переменная с общей зоной видимости , такой вариант как ви писали ранее подходит


#7

а )) елементи в масиве начинають нумерацию с нуля )) - читайте основи


#8

Странно - я обьявил массивы как public, но при старте валится все равно.


Причем до компиляции ошибок не выдает


#9

Если ви прочитаете блок while еще раз то поймете суть - питаетесь обратиться к несуществующему елементу ( добавление елементов делайте через array.append( new element) ) а если обновление потом - то можна и таким вариантом как у вас )


#10

Действительно!

Начал добавлять элементы через insert и падать вроде как все заработало. Остался последний вопрос: а можно как-нибудь задать отрисовку данных в TableView только после завершения работы Alamofire?


#11

код в первом сообщении - его вставить в конце блока запроса и будет обновляться


#12

Нет, про обновление я понял.

Просто у меня идет помещение результата в TableView и, как я понял, все валится потому что компилятор пытается обратиться к архиву раньше, чем он наполнится данными.
Я понимаю, что это не очень правильно, но может есть какой-нибудь способ начать загружать эти самые данные в tableView после того, как первый раз отработает Alamofire?


#13

Конечно есть, клоужеры в помощь


#14

у вас на скриншоте видна какая-то переменная CellCount - она относиться к делагату таблици - если она больше чем количество елементов в масиве -> cellForRow at Indexpath - где уже он питаеться извлечь данний из ниоткуда ( потому и рушиться) ( то что со скриншотов видно)


#15

И снова вы правы.

Спасибо огромное! Пойду дальше ковыряться сам)