は、私は彼/彼女の選択の任意のユーザに持っていたメッセージログインしているユーザーのリストを持っているtableViewControllerを持って働いていないチャット。セルをクリックすると、ログインしたユーザーが任意のユーザーとチャットできるView Controllerに移動する必要があります。私はエラーが「Lit_Swap.MessageTableViewCell」(型の値をキャストすることができませんでした取得firebase IOSはアプリが
var receiverData: AnyObject?
override func viewDidLoad() {
super.viewDidLoad()
self.senderId = FIRAuth.auth()?.currentUser?.uid
let receiverId = receiverData as! String
let receiverIdFive = String(receiverId.characters.prefix(5))
let senderIdFive = String(senderId.characters.prefix(5))
if (senderIdFive > receiverIdFive)
{
self.convoId = senderIdFive + receiverIdFive
}
else
{
self.convoId = receiverIdFive + senderIdFive
}}
:
var userpicuid: String?
var username: String?
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let message = messages[indexPath.row]
if message.ReceiverId != self.loggedInUserUid {
var newVariable = message.ReceiverId
if self.userpicuid == newVariable {
let ref = FIRDatabase.database().reference().child("users").child(userpicuid!)
ref.observeSingleEvent(of: .value, with: { (snapshot)
in
if let dictionary = snapshot.value as? [String: AnyObject]{
for post in dictionary {
let messages = post.value as! [String: AnyObject]
for (id, value) in messages {
self.username = messages["username"] as? String
}}}})}} else if message.senderId != self.loggedInUserUid {
let newVariable = message.senderId
if self.userpicuid == newVariable {
let ref = FIRDatabase.database().reference().child("users").child(userpicuid!)
ref.observeSingleEvent(of: .value, with: { (snapshot)
in
if let dictionary = snapshot.value as? [String: AnyObject]{
for post in dictionary {
let messages = post.value as! [String: AnyObject]
for (id, value) in messages {
self.username = messages["username"] as? String
}}}})}
}
performSegue(withIdentifier: "MessageNow", sender: self.userpicuid)
}
override public func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard segue.identifier == "MessageNow", let chatVc = segue.destination as? SendMessageViewController else {
return
}
chatVc.senderId = self.loggedInUser?.uid
chatVc.receiverData = sender as AnyObject
chatVc.senderDisplayName = self.userpicuid
chatVc.username = self.username
}
そして、先のビューコントローラで
、これはセットアップがある:私はオーバーライドセグエを設定しています0x1091d0f10)から 'NSString'(0x10b153c60)に変更します。送信者は明らかにtableviewcellなので、送信者を設定してセルをクリックしてチャットコントローラに送ることができます。
エラーの原因となっている行を具体的に知ることができます。ブレークポイントを設定し、手動で行単位でステップ実行すると、エラーのある行が表示されます。しかし、私はこの行* chatVc.receiverData =送信者が本当にこの行と一致しない値として送信者を割り当てるAnyObject *と考えています* let receiverId = receiverData as!文字列* – Jay
@Jay原因はエラーです 'let receiverId = receiverData as! String' – juelizabeth
右。私のコメントごとに。あなたは* sender *を別のクラスのように文字列に割り当てることはできません。 *(公共funcはセグエのために(準備上書き:UIStoryboardSegue、送信者を?:任意){(* – Jay