Я пытаюсь получить некоторые данные с помощью Alamofire и пытаюсь поместить некоторые из этих данных в массив
class BaseFormViewController : UIViewController, UITableViewDelegate, UITableViewDataSource {
let colorPalette = VOCColorPaletteManager()
let form = GetEmployeeCompositionApp()
let baseUrl = url
let parameters = parameters
var jsonData : EmployeeCompositionApp?
var separators : [Separator]?
// ------ IBOutlets ------
@IBOutlet weak var formTableView: UITableView!
/*** TableView ***/
var xibCell = "BaseFormCell"
var reuseIdentifier = "BaseFormCell"
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = colorPalette.clearGrayColorObject()
self.formTableView.delegate = self
self.formTableView.dataSource = self
self.formTableView.register(UINib(nibName: xibCell, bundle: nil), forCellReuseIdentifier: reuseIdentifier)
requestAllForms()
}
этот requestAllForms()
в ViewDidLoad - это метод, который я использую для получения этих данных
func requestAllForms() {
/***** Petición a API *****/
Alamofire.request(baseUrl,
method: .post,
parameters: parameters)
.responseJSON { response in
guard response.result.error == nil else {
print("Error en petición a Alamofire:\n \(String(describing: response.result.error))")
return
}
guard let json = response.result.value as? [String : Any] else {
print("No se ha podido extraer un archivo JSON")
if let error = response.result.error {
print("Error : \(error.localizedDescription)")
}
return
}
/****** Parseado de JSON *****/
do {
let decoder = JSONDecoder()
let rawData = try JSONSerialization.data(withJSONObject: json, options: [])
let objectData = try decoder.decode(EmployeeCompositionApp.self, from: rawData)
self.jsonData = objectData
/***** Metiendo datos en los arrays correspondientes *****/
for item in objectData.data.elements.separators {
self.separators?.append(item)
}
self.formTableView.reloadData()
} catch let error {
print("Error: \n", error)
}
}
}
Но когда я пытаюсь получить доступ к ViewController, он падает, я думаю, это потому, что в массиве еще ничего нет
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return (separators?.count)!
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! BaseFormCell
for item in (jsonData?.data.elements.separators)! {
separators.append(item)
cell.idLabel.text = item.separatorId
cell.nameLabel.text = item.name
cell.typeLabel.text = item.separatorType
let separatorsID = item.separatorId
cell.idLabel.text = separatorsID
print("separators id: \(separatorsID)")
let separatorsName = item.name
cell.idLabel.text = separatorsName
let separatorType = item.separatorType
cell.idLabel.text = separatorType
}
return cell
}
Когда он выходит из строя на консоли, есть только (lldb)
и Xcode выдает ошибку
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x103216bdc)
Что я делаю не так?Есть ли лучший способ использовать объекты, которые я получаю от Json, чем помещать их в массив внутри замыкания?
Спасибо