我是Swift新手。我試圖在兩個視圖控制器之間傳遞數據。第二個視圖控制器使用的值,從第一個視圖控制器傳遞的值爲零。我不明白爲什麼會發生這種情況。視圖控制器之間的Swift傳輸數據保持空
這是我在第一個視圖控制器中的tableView
函數調用。它獲取所選表格單元的用戶信息。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let user = User()
if(messages.count > 0) {
let message = self.messages[indexPath.row]
guard let chatPartnerID = message.chatPartnerID() else {
return
}
let ref = FIRDatabase.database().reference().child("users").child(chatPartnerID)
ref.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
guard let dictionary = snapshot.value as? [String: AnyObject]
else {
return
}
user.id = chatPartnerID
user.setValuesForKeysWithDictionary(dictionary)
self.setupChatLogControllerForUser(user)
}, withCancelBlock: nil)
}else {
let user = users[indexPath.row]
self.setupChatLogControllerForUser(user)
}
}
在NSObject
User
我聲明,像這樣:
class User: NSObject {
var id: String?
var name: String?
var email: String?
var profileImageUrl: String?
}
在第一視圖中控制器setupChatLogControllerForUser(user)
方法需要在被在tableView
方法給出,傳遞到所述第二視圖的用戶參數控制器(ChatLogController
)這樣的:
func setupChatLogControllerForUser(user: User) {
let chatLogController = ChatLogController()
chatLogController.selectedUserID = user.id!
chatLogController.user = user
}
我的第二個視圖控制器方法與此接收數據:
var selectedUserID = String()
var user = User()
第二視圖控制器還具有handleSend
方法,該方法是通過IBAction
連接到按鈕上我的故事板。
func handleSend() {
let ref = FIRDatabase.database().reference().child("messages")
let childRef = ref.childByAutoId()
let toID = self.selectedUserID
let fromID = FIRAuth.auth()!.currentUser!.uid
let timestamp: NSNumber = Int(NSDate().timeIntervalSince1970)
let values = ["text": messageInputField.text!, "toID": toID, "fromID": fromID, "timestamp": timestamp]
childRef.updateChildValues(values) { (error, ref) in
if error != nil {
print(error)
return
}
let userMessagesRef = FIRDatabase.database().reference().child("userMessages").child(fromID)
let messageID = childRef.key
userMessagesRef.updateChildValues([messageID: 1])
let recipientUserMessagesRef = FIRDatabase.database().reference().child("userMessages").child(toID)
recipientUserMessagesRef.updateChildValues([messageID: 1])
}
}
這種方法就是發生問題的地方。我設置toID
等於selectedUserID
。在調試器中,當視圖控制器延伸到ChatLogController
時,我可以看到填充了字符串的selectedUserID
。爲什麼在調用方法時selectedUserID
的值爲零?
據我所知,通過在selectedUserID
和User
對象是多餘的,我只是想看看,如果問題是一些與字符串變量爲類間傳遞,但它保持爲零。
任何幫助將會很棒!
編輯: 我使用的是賽格瑞
如何從第一個vc移動到第二個vc?繼續或編程? – Tj3n
你應該執行segue而不是新的ChatLogController() – WeiJay
問題是'ChatLogController()'。這是一個新的空實例,而不是故事板中預期的控制器。 – vadian