gpt4 book ai didi

swift - SWXMLHash EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

转载 作者:行者123 更新时间:2023-11-30 11:50:57 27 4
gpt4 key购买 nike

我刚刚将我的项目转换为 swift 4,但是当我使用 SWXMLHash 模拟我的应用程序时出现错误:

    var code: Int! = nil
var message: String! = nil
var paramsContent: String! = nil
let xmlStrData = SWXMLHash.lazy(strData)

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"


let appDel: AppDelegate = UIApplication.shared.delegate as! AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext

let simulationParamsDescription = NSEntityDescription.entity(forEntityName: "SimulationParams", in: context)
let simulationParams = NSManagedObject(entity: simulationParamsDescription!, insertInto: context)


code = Int((xmlStrData["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:GetSimulationParamsResponse"]["GetSimulationParamsReturn"]["code"].element?.text)!)!
message = xmlStrData["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:GetSimulationParamsResponse"]["GetSimulationParamsReturn"]["message"].element?.text

当我尝试获取代码节点值时,出现此错误:

EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

最佳答案

这里的解析似乎可能出了问题 - 最有可能的是 XML 响应的结构与您想象的不完全一样。

一般来说,在 Swift 中,最好避免使用 ! 强制展开选项,因为如果没有任何东西,你就保证应用程序会崩溃。最好使用 if letguard 语句,即使这会使代码更难看,只是因为它更安全。

为了调试这个,我将你的最后两行重写为一系列 guard (不确定涉及的类型是什么,所以你必须填写 $ DICT_TYPE_HERE 适当)。您可能不需要对每个级别都执行此操作,但我绝对会避免在一行中访问 4-5 个级别 - 这只是自找麻烦。

guard let envelope = xmlStrData["SOAP-ENV:Envelope"] else as? $DICT_TYPE_HERE {
//handle failure
return
}
guard let body = envelope["SOAP-ENV:Body"] else as? $DICT_TYPE_HERE {
//handle failure
return
}
.
.
until you find the problem

理想情况下,您应该使用 XML 对象映射器,它允许您声明可以来回转换为 XML 的 Swift 对象,但不幸的是,我找不到明显的 Swift 对象(有 JSON 的负载,包括Apple 自己制定的 Shiny 的新 Codable 协议(protocol))。

关于swift - SWXMLHash EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322913/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com