2016-11-15 2 views
1

У меня есть API, который загружает в мое приложение:JSON загружает, но не добавляет в UITable, но нет ошибок?

https://wger.de/api/v2/exercise/?language=2

У меня нет никаких ошибок на вызов 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 
} 
+0

У вас установлено свойство tableView.datasource? или вы используете UITableVIewController? это функции делегата datasource tableView, считывающие данные из self.excercises? здесь недостаточно информации – Scriptable

+0

Вы говорите, что 'print (self.exercises)' печатает пустой массив. Может ли быть так, что ваше создание элементов «Упражнения» терпит неудачу? Попробуйте добавить 'print' внутри' для результата в результатах' и другой внутри 'if let exercise = Exercise (dictionary: result)', чтобы увидеть, выполнены ли они. – pbodsk

+0

@vadian был прав, моя ошибка, хотя я был уверен, что эта проблема возникла прежде чем я работал над расширением сериализации, я, должно быть, ошибся, спасибо за решение, если вы хотите опубликовать его в качестве ответа, я могу отметить его, иначе я просто удалю вопрос – infernouk

ответ

2

К сожалению,

I havent changed any code

неправильно.

Вы добавили от свойств musclesSecondary и language и точно есть ошибка: language холост Int, а не массив.

var language: Int 
... 
let language = dictionary["language"] as? Int,