【问题标题】:JSON downloading but not adding to UITable, but no errors?JSON下载但未添加到UITable,但没有错误?
【发布时间】:2016-11-15 11:52:27
【问题描述】:

我有一个加载到我的应用程序中的 API:

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

我在 API 调用中没有错误,在我运行获取数据函数的表视图中也没有错误。它以前完美地工作到现在。我没有更改任何代码。

我认为服务器会因通话而停机,但它们并非如您所见。

我正在运行一个打印“请求成功”,它在运行时显示在调试中,所以它正在获取数据,但是 print(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?您的 tableView 数据源委托函数是否从 self.excercises 读取数据?这里没有足够的信息
  • 你说print(self.exercises) 打印一个空数组。会不会是您创建 Exercise 元素失败了?尝试在for result in results 中添加一个print,在if let exercise = Exercise(dictionary: result) 中添加另一个,看看它们是否被执行
  • @vadian 是正确的,我的错误,虽然我确信这个问题发生在我扩展序列化之前,我一定是弄错了,谢谢你的解决方案,如果你想把它发布为一个答案我可以标记它,否则我将删除问题

标签: json swift uitableview


【解决方案1】:

对不起,

我没有更改任何代码

错了。

您添加了属性 musclesSecondarylanguage 并且确实存在错误:language 是单个 Int 而不是数组。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2020-11-18
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多