У меня есть API, который загружает в мое приложение:JSON загружает, но не добавляет в UITable, но нет ошибок?
У меня нет никаких ошибок на вызов API и никаких ошибок в представлении таблицы, где я запускаю функцию получения данных. До сих пор он работал отлично. Я не изменил никакого кода.
Я предположил, что серверы будут недоступны для вызова, но они не подходят, как вы можете видеть.
Я выполняю печать «запрос был успешным», который отображается при отладке при запуске, поэтому его получение данных, однако печать (self.exercises) возвращает пустой массив, следовательно, нет данных таблицы ... любые идеи ? Вот API вызова
open class ApiService: NSObject {
open func getData(completionHandler: @escaping (NSDictionary?, NSError?) -> Void) -> Self {
//loads api filtering by english only
let requestUrl = "https://wger.de/api/v2/exercise/?format=json&language=2"
Alamofire.request(requestUrl, method: .get, encoding: URLEncoding.default)
.responseJSON { response in
switch response.result {
case .success(let data):
print("Request was sucessful")
completionHandler(data as? NSDictionary, nil)
case .failure(let error):
print("Request failed with error: \(error)")
completionHandler(nil, error as NSError?)
}
}
return self
}
Таблица Функция
func getApiData() {
let _ = apiService.getData() {
(data, error) in
if let data = data {
if let results = data["results"] as? [[String:Any]] {
for result in results {
if let exercise = Exercise(dictionary: result) {
self.exercises.append(exercise)
}
}
self.exercisesTableView.reloadData()
print(self.exercises)
}
}
}
}
Я также использую модель сериализации, если это может помешать?
final public class Exercise {
var id: Int
var descrip: String
var name: String
var language: [Int]
var muscles: [Int]
var musclesSecondary: [Int]
var equipment: [Int]
public init?(dictionary: [String: Any]) {
guard
let id = dictionary["id"] as? Int,
let descrip = dictionary["description"] as? String,
let name = dictionary["name"] as? String,
let language = dictionary["language"] as? [Int],
let muscles = dictionary["muscles"] as? [Int],
let musclesSecondary = dictionary["muscles_secondary"] as? [Int],
let equipment = dictionary["equipment"] as? [Int]
else { return nil }
self.id = id
self.descrip = descrip
self.name = name
self.language = language
self.muscles = muscles
self.musclesSecondary = musclesSecondary
self.equipment = equipment
}
У вас установлено свойство tableView.datasource? или вы используете UITableVIewController? это функции делегата datasource tableView, считывающие данные из self.excercises? здесь недостаточно информации – Scriptable
Вы говорите, что 'print (self.exercises)' печатает пустой массив. Может ли быть так, что ваше создание элементов «Упражнения» терпит неудачу? Попробуйте добавить 'print' внутри' для результата в результатах' и другой внутри 'if let exercise = Exercise (dictionary: result)', чтобы увидеть, выполнены ли они. – pbodsk
@vadian был прав, моя ошибка, хотя я был уверен, что эта проблема возникла прежде чем я работал над расширением сериализации, я, должно быть, ошибся, спасибо за решение, если вы хотите опубликовать его в качестве ответа, я могу отметить его, иначе я просто удалю вопрос – infernouk