Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法强制转换类型为'__NSArray0';至';NSDictionary';_Ios - Fatal编程技术网

Ios 无法强制转换类型为'__NSArray0';至';NSDictionary';

Ios 无法强制转换类型为'__NSArray0';至';NSDictionary';,ios,Ios,当我解析json响应时 这是我的错误 无法将类型为“\uu NSArray0”(0x104bcd838)的值强制转换为“NSDictionary”(0x104bcf818) 这是我的密码 @IBAction func LoginAction(_ sender: Any) { let parameters: Parameters=[ "email":emailUser.text!, "password":passWord.text!,

当我解析json响应时 这是我的错误

无法将类型为“\uu NSArray0”(0x104bcd838)的值强制转换为“NSDictionary”(0x104bcf818)

这是我的密码

@IBAction func LoginAction(_ sender: Any) {

    let parameters: Parameters=[

        "email":emailUser.text!,
        "password":passWord.text!,

        ]
    let url2 = "http://marwen1994.alwaysdata.net/Carpooling/public/loginpost.php"
    Alamofire.request(url2, method: .post, parameters: parameters).responseJSON
        {
            response in
            let A = response.result.value as! Dictionary<String,Any>
          let list = A["items"] as! Dictionary<String,Any>
            let nom = list["name"] as! String
            let pass = A["password"] as! String
            let email = list["email"] as! String
            let adresse = A["adresse"] as! String
            let DateNaissance = A["DateNaissance"] as! String
            let id = A["id"] as! Int
            let numTel = A["num_tel"] as! Int
            if(pass == self.passWord.text)
            {
                UserDefaults.standard.set(true, forKey: "ConnectionStatus")
                UserDefaults.standard.set(id, forKey: "ConnectedID")
                UserDefaults.standard.set(nom, forKey: "nom")
               // UserDefaults.standard.set(prenom, forKey: "prenom")
                UserDefaults.standard.set(email, forKey: "email")
                UserDefaults.standard.set(adresse, forKey: "adresse")
                UserDefaults.standard.set(pass, forKey: "motDePasse")
                UserDefaults.standard.set(numTel, forKey: "numTel")
                UserDefaults.standard.set(DateNaissance, forKey: "DateNaissance")
                self.performSegue(withIdentifier: "toProfile", sender: nil)
            }
            else{
                let alert = UIAlertController(title: "Woah!!!", message: "You inserted a wrong email or a wrong password! Please enter a valid mail and password.", preferredStyle: .alert)

                alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))

                self.present(alert, animated: true)
            }
    }
}
@iAction func登录操作(\发送方:任意){
let参数:参数=[
“email”:emailUser.text!,
“密码”:密码。文本!,
]
让url2=”http://marwen1994.alwaysdata.net/Carpooling/public/loginpost.php"
请求(url2,方法:.post,参数:parameters).responseJSON
{
回应
设A=response.result.value为!Dictionary
将list=A[“items”]设为!字典
让nom=list[“name”]作为!字符串
将[“密码”]作为!字符串传递
让email=将[“email”]列为!字符串
设ADRESE=A[“ADRESE”]为!字符串
让DateNaissance=A[“DateNaissance”]作为!字符串
设id=A[“id”]as!Int
设numTel=A[“num_tel”]为!Int
if(pass==self.passWord.text)
{
UserDefaults.standard.set(true,forKey:“ConnectionStatus”)
UserDefaults.standard.set(id,forKey:“ConnectedID”)
UserDefaults.standard.set(nom,forKey:“nom”)
//UserDefaults.standard.set(prenom,forKey:“prenom”)
UserDefaults.standard.set(email,forKey:“email”)
UserDefaults.standard.set(adresse,forKey:“adresse”)
UserDefaults.standard.set(pass,forKey:“motDePasse”)
UserDefaults.standard.set(numTel,forKey:“numTel”)
UserDefaults.standard.set(DateNaissance,forKey:“DateNaissance”)
self.performsgue(标识符为“toProfile”,发送方:nil)
}
否则{
让alert=UIAlertController(标题:“哇!!!”,消息:“您插入了错误的电子邮件或密码!请输入有效的邮件和密码。”,首选样式:。alert)
addAction(UIAlertAction(标题:“确定”,样式:。取消,处理程序:nil))
self.present(警报、动画:true)
}
}
}

如果看不到实际的JSON响应,很难知道错误在哪里,但这可能是一个数组而不是字典

let list = A["items"] as! Dictionary<String,Any>

如果您可以考虑使用<代码>可编辑< /代码>,这可能有助于

struct JsonResponse: Decodable {
    let items: [Item]
}

struct Item: Decodable {
    let id: String
    let name: String
    let email: String
    let encrypted_password: String
    let num_tel: String
    let adresse: String
    let DateNaissance: String
}
实际解码是这样完成的

let decoder = JSONDecoder()
do {
    let jsonResponse = try decoder.decode(JsonResponse.self, from: data)

    for item in jsonResponse.items {
        UserDefaults.standard.set(item.name, forKey: "nom")
        UserDefaults.standard.set(item.email, forKey: "email")
        //and so on
    }
} catch {
    print("Decode error: \(error)")
}
data
response
中的json消息,我不知道Alamofire是如何工作的,所以您需要自己弄清楚如何正确访问它


“items”中有一个数组,只有一个元素,可以像

if let A = response.result.value as? Dictionary<String,Any>, let list = A["items"][0] as? Dictionary<String,Any> {

}
如果让A=response.result.value为?字典,让list=A[“items”][0]作为?字典{
}

这个错误很明显,不是吗<代码>设A=response.result.value为!字典。json响应是什么样子的?{“items”:[{“id”:“14”,“unique_id”:“5bb7682e2031f7.15799495”,“name”:“test”,“email”:test@test.com,“加密密码”:“5HQXUSQX1GYMO5ZVORVJBKHVFMXOTQWYMYWM2EW”,“salt”:“1940bf03a0”,“创建于”:“2018-10-05 15:33:34”,“更新时间:null”,“电话号码”:“+2169502248”,“图片”:“14”,“地址”:“突尼斯阿里亚纳”,“出生日期”:“12/14/2018”}]}所以,
A[“项目”]
是一个包含字典而不是字典本身的数组。一般来说,除非你真的知道正确的类型,否则不要使用
。(学习)阅读JSON。这非常简单。只有两种集合类型:
[]
是数组(Swift
[[String:Any]
[dictionary]
),
{}
是字典(Swift
[String:Any]
字典
).{“items”:[{“id”:“14”,“unique_id”:“5bb7682e2031f7.15799495”,“name”:“test”,“email”:test@test.com,“加密密码”:“5HQXUSQX1GYMO5ZVORVJBKHVFMXOTQWYMYWM2EW“,”salt“:”1940bf03a0“,”created_at:”2018-10-05 15:33:34“,”updated_at:”null“,”num_tel“,”2169502248“,”image“,”14“,”adrese“:”tunis ariana“,”DateNaissance“:”12/14/2018“}”)这是JSOn响应是的,我说的,items是一个数组,不是字典,因为它只有一个元素,您可以按以下方式执行
let list=a[“items”][0]!作为!Dictionary
,但是如果您管理服务器并且它只返回一个项目,我会将其更改为返回对象(Dictionary)而不是数组。您将密码返回到应用程序也不好这是我的jsonresponse{“items”:[{“id”:“14”,“unique_id”:“5bb7682e2031f7.15799495”,“name”:“test”,“email”:test@test.com,“加密密码”:“5HQXUSQX1GYMO5ZVORVJBKHVFMXOTQWYMYWM2EW”,“salt”:“1940bf03a0”、“创建时间”:“2018-10-05 15:33:34”、“更新时间”:“空”、“数字电话”:“+2169502248”、“图像”:“14”、“地址”:“突尼斯阿里亚纳”、“出生日期”:“2018年12月14日”}
if let A = response.result.value as? Dictionary<String,Any>, let list = A["items"][0] as? Dictionary<String,Any> {

}