Ios Swift JSON错误:线程4:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)
我不熟悉从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本身的补丁代码。我经常访问该站点,寻找类似的错误,我已经根据代码实现了这些错误的建议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
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”],那么您的代码可能更容易调试调用构造函数之前的代码>