Swift / ObjC:尝试从对象中插入零对象[1]

时间:2020-07-18 21:59:27

标签: ios objective-c swift xcode swift5

我正在跟踪有关Udemy的有关Swift的教程,即使我的代码与老师的代码完全相同,我的应用也会崩溃。

它使用Firebase创建用户并登录。

我的问题是,当我尝试创建新用户时,它因以下错误而崩溃:

"*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]"

研究完我的代码后,看来问题出在registerUser函数上:

    static func registerUser(withCredentials credentials: AuthCredentials, completion: @escaping((Error?) -> Void)) {
    
    Service.uploadImage(image: credentials.profileImage) { imageUrl in
        Auth.auth().createUser(withEmail: credentials.email, password: credentials.password) { (result, error) in
            if let error = error {
                print("DEBUG: Error signing user up, \(error.localizedDescription)")
                return
            }
            
            guard let uid = result?.user.uid else { return }
            
            let data = ["email": credentials.email,
                        "name": credentials.name,
                        "imageUrl": imageUrl,
                        "uid": uid,
                        "age": 18] as [String : Any]
            
            Firestore.firestore().collection("users").document(uid).setData(data, completion: completion)
        }
    }
}

在这里称为

    @objc func handleRegisterUser() {
    guard let email = emailTextField.text else { return }
    guard let name = nameTextField.text else { return }
    guard let password = passwordTextField.text else { return }
    guard let profileImage = self.profileImage else { return }

    let credentials = AuthCredentials(email: email, password: password, name: name, profileImage: profileImage)

    **AuthService.registerUser(withCredentials: credentials) { error in
        if let error = error {
            print("DEBUG: Error signing user up, \(error.localizedDescription)")
            return
        }**

        self.dismiss(animated: true, completion: nil)
    }
}

有人可以通过指导我正确看待我的方向来帮助我吗? 我尝试搜索StackOverFlow,但我能找到的最接近的线程是6年前的,而我在那里没有找到任何答案。

非常感谢您的帮助,

吉耶瑟斯

1 个答案:

答案 0 :(得分:0)

我认为imageUrl在您的情况下为零。像这样更改此功能,看看有什么问题

static func registerUser(withCredentials credentials: AuthCredentials, completion: @escaping((Error?) -> Void)) {
        
        Service.uploadImage(image: credentials.profileImage) { imageUrl in
            let urlString: String? = imageUrl
            Auth.auth().createUser(withEmail: credentials.email, password: credentials.password) { (result, error) in
                if let error = error {
                    print("DEBUG: Error signing user up, \(error.localizedDescription)")
                    return
                }
                
                guard let uid = result?.user.uid else { return }
                guard let geturl = urlString else { print("url is nil"); return}
                guard let getName = credentials.name else { print("name is nil"); return}
                
                let data = ["email": credentials.email,
                            "name": credentials.name,
                            "imageUrl": imageUrl,
                            "uid": uid,
                            "age": 18] as [String : Any]
                
                Firestore.firestore().collection("users").document(uid).setData(data, completion: completion)
            }
        }
    }