(child:) 必须是非空字符串且不包含 '.' '#' '$' '[' 或 ']''

Posted

技术标签:

【中文标题】(child:) 必须是非空字符串且不包含 \'.\' \'#\' \'$\' \'[\' 或 \']\'\'【英文标题】:(child:) Must be a non-empty string and not contain '.' '#' '$' '[' or ']''(child:) 必须是非空字符串且不包含 '.' '#' '$' '[' 或 ']'' 【发布时间】:2017-09-19 14:48:08 【问题描述】:

您好,我正在使用 Firebase 和 Swift3 构建我的应用程序,但是当我运行代码时出现此错误 "(child:) Must be a non-empty string and not contain '.' '#' '$' '[' 或 ']''" 。这是我得到错误的函数,即使一切正常

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    print (self.otherUserUid)
    let reference = Database.database().reference().child("User-messages").child(Auth.auth().currentUser!.uid).child(self.otherUserUid).queryLimited(toLast: 51)
    reference.observeSingleEvent(of: .value, with: [weak self] (snapshot) in
        print("IN")
        let messages = Array(JSON(snapshot.value as Any).dictionaryValue.values).sorted(by:  (lhs, rhs) -> Bool in
            return lhs["date"].doubleValue < rhs["date"].doubleValue

        )
        let converted = self!.convertToChatItemProtocol(messages: messages)
        if converted.isEmpty == true 
            print ("empty")
        
        let navcontroller = segue.destination as! UINavigationController
        let chatlog = navcontroller.topViewController as! ChatLogController
        chatlog.userUID = self.otherUserUid
        chatlog.dataSource = DataSource(initialMessages: converted ,uid: (self?.UIDLabel.text)!)
        chatlog.MessagesArray = FUIArray(query: Database.database().reference().child("User-messages").child(Me.uid).child((self?.UIDLabel.text)!).queryStarting(atValue: nil, childKey: converted.last?.uid), delegate: nil)


        messages.filter( (message) -> Bool in
            return message["type"].stringValue == PhotoModel.chatItemType
        ).forEach( (message) in
            self?.parseURLs(UID_URL: (key: message["uid"].stringValue, value: message["image"].stringValue))
        )

    )


应用程序在打印“IN”之前崩溃,但是当我打印 self.otherUserUid 时,它会返回正确的值。我还更新了 pod,但没有解决任何问题。 在此先感谢:)

解决方案:错误是我在 ChatLogController 的 viewDidLoad 中插入了一个 func,当用户决定结束聊天时,另一个人会收到通知,但该 func 需要另一个用户 Uid 并且当视图加载时不是任何uid,因为它必须被传递,所以我在“viewDidAppear”中插入了func,一切正常。感谢所有试图帮助我的人。

【问题讨论】:

请显示firebase数据json 【参考方案1】:

之所以发生这种情况,是因为在 Firebase 中这个符号 '.' '#' '$' '[' or ']' 是被禁止的。 Firebase 中的键不能包含任何此类符号。因此,为了解决这个问题,您需要通过将这些符号替换为允许的其他符号来对这些字符串进行编码。例如,对于电子邮件地址,我建议您进行此更改。

name@email.com -> name@email,com

如您所见,我已将.(点)替换为,(逗号)。

【讨论】:

是的,我知道,我已经检查过这个问题并且所有的字符串都没有任何这个符号'。' '#' '$' '[' or ']' 因为每个孩子都只是一个用户 uid,也就是一个字符串。还是谢谢。 同时检查非空字符串。它有价值吗?【参考方案2】:

对我来说,问题是我将 Double 值转换为字符串。但是,当您更具体地查看 Double 值时,它们会包含一个点,例如“1234.56”所以 Firebase 对我大喊大叫。我用逗号“1234,56”替换了那个点,结果成功了。

为了用逗号替换点,可以推荐这篇文章:

https://***.com/a/24201206/8165702

【讨论】:

以上是关于(child:) 必须是非空字符串且不包含 '.' '#' '$' '[' 或 ']''的主要内容,如果未能解决你的问题,请参考以下文章

键必须是非空字符串,并且不能包含“.”、“#”、“$”、“/”、“[”或“]”

当初始值为空字符串且新值为 null 时调用 valueChangeListener

正则表达式包含某字符串且不包含某些字符串

正则表达式包含某字符串且不包含某些字符串

格子 webhook 必须是非空字符串 URL

如何解决node.js中的“消息内容必须是非空字符串”[关闭]