Ios Swift JSON错误:线程4:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)

Ios Swift JSON错误:线程4:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0),ios,swift,Ios,Swift,我不熟悉从API获取数据并在应用程序上显示它们。我使用NODE.JS创建了一个GET API web服务,连接到MSSQL Server DB,我在下面发布了其响应: {“记录集”:[[{“USERCODE”:10000,“USERNAME”:“ADMIN”,“USERFIRSTNAME”:“Administrator”,“USERLASTNAME”:“USERTYPE”:0},{“USERCODE”:10001,“USERNAME”:“nmahamad”,“USERFIRSTNAME”:“No

我不熟悉从API获取数据并在应用程序上显示它们。我使用NODE.JS创建了一个GET API web服务,连接到MSSQL Server DB,我在下面发布了其响应:

{“记录集”:[[{“USERCODE”:10000,“USERNAME”:“ADMIN”,“USERFIRSTNAME”:“Administrator”,“USERLASTNAME”:“USERTYPE”:0},{“USERCODE”:10001,“USERNAME”:“nmahamad”,“USERFIRSTNAME”:“Nooh”,“USERLASTNAME”:“Ahamad”,“USERTYPE”:0}],“记录集”:[{“USERCODE”:10000,“USERNAME”:“ADMIN”,“USERNAME”:“USERNAME”:“USERTYPE”:0},{“USERCODE”:10001,“用户名”:“nmahamad”,“USERFIRSTNAME”:“Nooh”,“USERLASTNAME”:“Ahamad”,“USERTYPE”:0}],“output”:{},“rowsAffected”:[2]}

我的代码主要是来自YouTube和StackOverflow本身的补丁代码。我经常访问该站点,寻找类似的错误,我已经根据代码实现了这些错误的建议

class HomeModel: NSObject {

    var delegate: HomeModelDelegate?

    func getUsers() {

        //Hit the web service url
        let serviceUrl = "http://localhost:12345/api/GETUsers"

        //Download JSON data
        let url = URL(string: serviceUrl)

        if let url = url {

            //Create a url session
            let session = URLSession(configuration: .default)
            let task = session.dataTask(with: url) { (data, response, error) in
                if error == nil {
                    //Data successfully loaded and call the parseJson function on the data
                    self.parseJson(data: data!)
                }
                else {
                    //Some error occurred
                    print("Some error occurred")
                }
            }
            task.resume()
        }
        //Notify the viewcontroller and pass the data back
    }

    func parseJson(data: Data) {
        var usrArray = [User]()
        var jsonArray : Array<AnyObject> = []
        //Parse the data into User struct
        do {
            let tmp : AnyObject! = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
            if let arr = tmp as? Array<AnyObject> {
                jsonArray = arr
            } else {
                jsonArray = tmp["recordsets"] as! Array<AnyObject>
            }
            //Parse the data into JSON Object
            //Loop through each result in the JSON array
            for jsonArr in jsonArray {
                for jsonResult in jsonArr as! [AnyObject] {
                    //Caste JSON result as a dictionary
                    let jsonDict = jsonResult as! [String:Any]
                    //Create new User and set its properties
                    let usr = User(mUsrCode: jsonDict["USERCODE"]! as! String, mUsrNm: jsonDict["USERNAME"]! as! String, mUsrFNm: jsonDict["USERFIRSTNAME"]! as! String, mUserLNm: jsonDict["USERLASTNAME"]! as! String, mUsrType: jsonDict["USERTYPE"]! as! Int)
                    //Add the user to the array
                    usrArray.append(usr)
                }
            }
            //Pass the data array back to the delegate
            delegate?.usersDownloaded(users: usrArray)
        }
        catch{
            //Some error occurred
            print("Some error occurred")
        }
    }
}
类HomeModel:NSObject{
变量委托:HomeModelDelegate?
func getUsers(){
//点击web服务url
让serviceUrl=”http://localhost:12345/api/GETUsers"
//下载JSON数据
让url=url(字符串:serviceUrl)
如果让url=url{
//创建url会话
let session=URLSession(配置:。默认值)
让task=session.dataTask(带:url){(数据、响应、错误)在
如果错误==nil{
//成功加载数据并对数据调用parseJson函数
parseJson(数据:data!)
}
否则{
//发生了一些错误
打印(“发生了一些错误”)
}
}
task.resume()
}
//通知viewcontroller并将数据传回
}
func parseJson(数据:数据){
var usrArray=[User]()
var jsonArray:Array=[]
//将数据解析为用户结构
做{
让tmp:AnyObject!=尝试将JSONSerialization.jsonObject(使用:data,options:JSONSerialization.ReadingOptions.mutableContainers)作为AnyObject
如果让arr=tmp as?阵列{
jsonArray=arr
}否则{
jsonArray=tmp[“记录集”]as!数组
}
//将数据解析为JSON对象
//循环遍历JSON数组中的每个结果
对于jsonArray中的jsonArr{
对于jsonResult,jsonArr为![AnyObject]{
//将JSON结果转换为字典
让jsonDict=jsonResult为![String:Any]
//创建新用户并设置其属性
让usr=User(mUsrCode:jsonDict[“USERCODE”]!as!String,mUsrNm:jsonDict[“USERNAME”]!as!String,mUsrFNm:jsonDict[“USERFIRSTNAME”]!as!String,mUsrType:jsonDict[“USERTYPE”]!as!Int)
//将用户添加到数组中
usrArray.append(usr)
}
}
//将数据数组传递回代理
委托?.usersDownloaded(用户:usrArray)
}
抓住{
//发生了一些错误
打印(“发生了一些错误”)
}
}
}
我已经对引用各种源的各种错误进行了增量更改,直到应用程序崩溃,控制台中没有错误消息。。。然后在这一行显示以下消息:“让jsonDict=jsonResult作为![String:String]”

线程4:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)


您的字典同时包含字符串和int值,因此您需要将强制转换更改为
[string:Any]
。也许让
用户
实现
可解码
是个好主意,这样你就可以真正摆脱很多代码,并将错误处理从打印硬编码字符串改为打印实际错误,
打印(错误)
非常感谢。。。。。然而,这就是我接下来得到的,
错误:在jsondict声明中,在类型名称之后预期的成员名称或构造函数调用
,您能否显示您得到错误的那一行是什么样子的,
让jsondict…
?您不能将int转换为字符串,请将您的代码与Json消息进行比较。如果您创建中间的局部变量,比如
let userCode=jsonDict[“userCode”],那么您的代码可能更容易调试在调用构造函数之前,您的字典同时包含字符串和int值,因此您需要将强制转换更改为
[string:Any]
。也许让
用户
实现
可解码
是个好主意,这样你就可以真正摆脱很多代码,并将错误处理从打印硬编码字符串改为打印实际错误,
打印(错误)
非常感谢。。。。。然而,这就是我接下来得到的,
错误:在jsondict声明中,在类型名称之后预期的成员名称或构造函数调用
,您能否显示您得到错误的那一行是什么样子的,
让jsondict…
?您不能将int转换为字符串,请将您的代码与Json消息进行比较。如果您创建中间的局部变量,比如
let userCode=jsonDict[“userCode”],那么您的代码可能更容易调试