gpt4 book ai didi

ios - 如何获得像 "dictionary.count"返回值这样的全局定义?

转载 作者:行者123 更新时间:2023-12-01 19:37:08 25 4
gpt4 key购买 nike

我正在尝试从 Firebase 实时数据库中获取特定的用户消息。我想填写 chatLogTableView使用用户消息。我正在使用 fetchCurrentUserMessages() 从 Firebase 获取用户消息数据功能。

在这个函数中:

self.messagesDatas.append(message)

print(self.messagesDatas)

当我尝试打印 self.messagesDatas没关系。但是当 tableview 试图检索 self.messagesDatas.count对于 numberOfRowsInSection我的计数为 0。为什么会这样?

这是我的代码:
import UIKit
import Firebase

class ChatLogCustomCell: UITableViewCell {

@IBOutlet weak var leftLabel: UILabel!
@IBOutlet weak var rightLabel: UILabel!

}


class ChatLogViewController: UIViewController,UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var chatLogTableView: UITableView!


@IBOutlet weak var messageTextField: UITextField! // bu kismi elle yazman gerekebilir cunku xcode bu messagetextfield i sanki view in icinde oldugu icin table view icinde algilayamayabilir

@IBOutlet weak var backButton: UINavigationItem!
var usersDataFromChatScreen = [User]()
var selectedUserToIDFromChatScreen = ""
var isTeacherFromChatScreen = ""

var messagesDatas = [Message]()
var messagesDictionary = [String : Message]()


override func viewDidLoad() {
super.viewDidLoad()

chatLogTableView.delegate = self
chatLogTableView.dataSource = self

}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return messagesDatas.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = chatLogTableView.dequeueReusableCell(withIdentifier: "chatLogCell") as! ChatLogCustomCell

let message = messagesDatas[indexPath.row]

cell.leftLabel.text = message.text
cell.rightLabel.text = message.text

return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80.0
}

@IBAction func sendButtonTouchOnInside(_ sender: Any) {
let ref = Database.database().reference().child("messages")
let childRef = ref.childByAutoId()

let toID = selectedUserToIDFromChatScreen

Auth.auth().addStateDidChangeListener { (auth, user) in
let fromID = auth.currentUser?.uid

let values = ["text" : self.messageTextField.text, "toID" : toID, "fromID" : fromID] as [String : Any]

childRef.updateChildValues(values) { (error, ref) in
if error != nil {
print(error ?? "")
return
}

guard let messageID = childRef.key else { return }

let userMessagesRef = Database.database().reference().child("user-messages").child(fromID!).child(messageID)
userMessagesRef.setValue(1)

let recipientUserMessagesRef = Database.database().reference().child("user-messages").child(toID).child(messageID)
recipientUserMessagesRef.setValue(1)
}
}



}

func fetchCurrentUserMessages() {
guard let uid = Auth.auth().currentUser?.uid else {
return
}

if self.isTeacherFromChatScreen == "no" {
let ref = Database.database().reference().child("user-messages").child(uid)

ref.observe(.childAdded) { (snapshot) in
let messageID = snapshot.key
let messagesRef = Database.database().reference().child("messages").child(messageID)

messagesRef.observeSingleEvent(of: .value) { (snapshot) in
guard let dictionary = snapshot.value as? [String: AnyObject] else {
return
}

let message = Message()

let toID = dictionary["toID"] as? String ?? "toID not found"
let messageText = dictionary["text"] as? String ?? "Text not found"

let fromID = dictionary["fromID"] as? String ?? "fromID not found"

message.toID = toID
message.text = messageText
message.fromID = fromID
self.messagesDatas.append(message)

print(self.messagesDatas.count)

}

}

}
else {

}

}




}

最佳答案

从服务器获取数据时重新加载表格 View

func fetchCurrentUserMessages() {
guard let uid = Auth.auth().currentUser?.uid else {
return
}

if self.isTeacherFromChatScreen == "no" {
let ref = Database.database().reference().child("user-messages").child(uid)

ref.observe(.childAdded) { (snapshot) in
let messageID = snapshot.key
let messagesRef = Database.database().reference().child("messages").child(messageID)

messagesRef.observeSingleEvent(of: .value) { (snapshot) in
guard let dictionary = snapshot.value as? [String: AnyObject] else {
return
}

let message = Message()

let toID = dictionary["toID"] as? String ?? "toID not found"
let messageText = dictionary["text"] as? String ?? "Text not found"

let fromID = dictionary["fromID"] as? String ?? "fromID not found"

message.toID = toID
message.text = messageText
message.fromID = fromID
self.messagesDatas.append(message)

print(self.messagesDatas.count)
DispatchQueue.main.async {
chatLogTableView.reloadData()
}


}

}

}
else {

}

}

关于ios - 如何获得像 "dictionary.count"返回值这样的全局定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59828956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com