无法在名称中存储_SwiftValue类型的对象。只能存储NSNumber,NSString,NSDictionary和NSArray类型的对象。

时间:2016-11-17 04:45:34

标签: ios swift string firebase firebase-realtime-database

全部,我正在使用Firebase驱动的应用程序遇到一些问题。在将我的xCode升级到版本8之后出现了这个问题。我已经对此进行了一些广泛的研究,并经历了一些试图解决这个问题的Stackoverflow主题,因为它似乎是一个非常常见的错误。我收集它可能是一个非常明显的东西,我错过了,原谅我的愚蠢。

这是我收到的错误。

  

无法在名称中存储_SwiftValue类型的对象。只能存储NSNumber,NSString,NSDictionary和NSArray类型的对象。

这是我相信的部分代码。

    func saveUser(withUID uid: String, username: String, value: [String:   String?], completion: @escaping (Error?) -> Void) {
         let values = ["/users/\(uid)": value, "/usernames/\(username)": uid] as [String: Any]
         root.updateChildValues(values) { (error, _) in
            completion(error)
        }
    }

    func updateUser(_ newValue: [String: String?]) {
        currentUser.updateChildValues(newValue)
    }

    // MARK: - Posts

    func createPost(_ _post: [String: String]) {

        let userUID = Auth.shared.currentUserUID
        let key = posts.childByAutoId().key

        var post = _post
        post["userUID"] = userUID

        // get current user's username
        currentUser.child("username").observeSingleEvent(of: .value, with: {     snapshot in
            if let username = snapshot.value as? String {
                post["username"] = username
                let values = [
                    "/posts/\(key)": post,
                    "/user-posts/\(userUID)/\(key)": post
                ]
                self.root.updateChildValues(values)
            }
        })

    }

1 个答案:

答案 0 :(得分:0)

我的代码中也出现了同样的错误,只是想出来了。确保values的类型为[String : String],而不是[String : String?]