我相信我已经将问题缩小到这样一个事实,即在下面的代码中,我提供的条件不应该存在。但出于某些原因,当我运行应用程序时,它会像self.motorbikes行一样远。使用线程1:EXC_BAD_INSTRUCTION错误。
(请参阅图片)
可能是因为我的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
}
}
}
答案 0 :(得分:0)
我有这种偷偷摸摸的怀疑,这是因为该对象仍在初始化器调用堆栈中。也许让loadMotorbikes()
func返回Motorbike
个对象的列表并在初始化程序中分配它?这样做的一个额外好处是,您可以使Motorbike
个对象的列表保持不变。