尝试解析JSON以在应用程序中显示图像

时间:2017-10-10 18:55:14

标签: ios json swift xcode

我相信我已经将问题缩小到这样一个事实,即在下面的代码中,我提供的条件不应该存在。但出于某些原因,当我运行应用程序时,它会像self.motorbikes行一样远。使用线程1:EXC_BAD_INSTRUCTION错误。

(请参阅图片)

enter image description here

可能是因为我的DataSource.swift文件没有连接到我的motorbikes.json文件吗?

我试图以编程方式完全构建它,所以不使用故事板对我来说很难。如果有人可以提供帮助,我会非常感激。

import Foundation

class MotorbikeDataSource {

fileprivate var motorbikes: [Motorbike]?

init() {
    self.loadMotorbikes()
}

public func allMotorbikes() -> [Motorbike]? {
    return self.motorbikes
}

}

extension MotorbikeDataSource {

fileprivate func loadMotorbikes() {

    guard let path = Bundle.main.path(forResource: "motorbikes", ofType: "json") else {
        assert(false, "Could not find motorbikes file")
        return
    }


    guard let contents = NSData(contentsOfFile: path) as Data? else {
        assert(false, "Could not load motorbikes file: \(path)")
        return
    }

    self.motorbikes = [Motorbike]()
    do {
        if let jsonDict = try JSONSerialization.jsonObject(with: contents, options: []) as? Dictionary<String, Any> {
            if let motorbikes = jsonDict["motorbikes"] as? Array<Dictionary<String, Any>> {
                for motorbikeDict in motorbikes {
                    if let motorbike = Motorbike(dict: motorbikeDict) {
                        self.motorbikes?.append(motorbike)
                    }
                }
            }
        }
    } catch {
        assert(false, "Could not parse motorbikes file: \(path)")
        return
    }
}

}

1 个答案:

答案 0 :(得分:0)

我有这种偷偷摸摸的怀疑,这是因为该对象仍在初始化器调用堆栈中。也许让loadMotorbikes() func返回Motorbike个对象的列表并在初始化程序中分配它?这样做的一个额外好处是,您可以使Motorbike个对象的列表保持不变。