【发布时间】:2017-04-29 03:45:40
【问题描述】:
我试图通过 didSelectRowAt 将用户名从我的 TableViewCell 传递到另一个表单。 TableViewCell 中的用户名是通过数组生成的
import UIKit
import Firebase
import FirebaseDatabase
var userNames = [String] ()
var planType = [String] ()
var planDesc = [String] ()
var planDate = [String] ()
//Index contains item in array that we want to display
var myIndex = 0;
class RequestsTableViewController: UITableViewController
{
@IBOutlet weak var lblUsernameX: UILabel!
var userNameX = ""
var dbReference: FIRDatabaseReference!
var usersReference : FIRDatabaseReference!
override func viewDidLoad()
{
super.viewDidLoad()
lblUsernameX.text = userNameX
//reference to database
self.dbReference = FIRDatabase.database().reference()
//reference to users in database
self.usersReference = dbReference.child("MH_PlanRequest")//.queryOrdered(byChild: "username")
//data comes into a snapshot object
self.usersReference.observe(.childAdded, with: { (snapshot) in
//var usersSnapshotArray = [FIRDataSnapshot]()
//from the snapshot get the entry as key-value (KV)pair
//use a swift native Dictionary object to hold the KV pair
let snapshotValue = snapshot.value as! Dictionary<String, String>
//use the keys to get the values
let userName = snapshotValue["username"]! as String
let date = snapshotValue["date"]! as String
let type = snapshotValue["plantype"]! as String
let desc = snapshotValue["plandesc"]! as String
//print(userName)
//print(date)
//print(planType)
userNames.append(userName)
planDate.append(date)
planType.append(type)
planDesc.append(desc)
self.tableView.reloadData()
})
//print("Reloading Data....")
//tableView.reloadData()
//print("Data Reloaded....")
//tableView.reloadData()
}
该数组取自我的 Firebase 数据存储
当我单击单元格并转到另一个表单时,我收到此错误。
错误:
Cannot convert value of type '[String]' to expected argument type 'String'
另一个表单包含标签,并基于他们将加载到 ViewDidLoad 中的用户名标签,并且数据来自 Firebase 中的用户。
import UIKit
import Firebase
import FirebaseDatabase
class ManageRequestViewController: UIViewController
{
@IBOutlet weak var lblUsernameX: UILabel!
var userNameX = ""
@IBOutlet weak var lblDate: UILabel!
@IBOutlet weak var lblUsername: UILabel!
@IBOutlet weak var lblPlanType: UILabel!
@IBOutlet weak var lblActivityLevel: UILabel!
@IBOutlet weak var lblWeight: UILabel!
@IBOutlet weak var lblAge: UILabel!
@IBOutlet weak var lblHeight: UILabel!
@IBOutlet weak var lblCalorie: UILabel!
@IBOutlet weak var txtDesc: UITextView!
@IBOutlet weak var txtDietPlan: UITextView!
var dbActivityLevel = ""
var dbWeight = ""
var dbAge = ""
var dbHeight = ""
var dbReference: FIRDatabaseReference!
var usersReference : FIRDatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
lblUsernameX.text = userNameX
lblUsername.text = userNames[myIndex]
//lblDesc.text = petDesc[myIndex]
/*Code to dismiss keyboard on background tap
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(LoginViewController.dismissKeyboard))
view.addGestureRecognizer(tap)
*/
//reference to database
self.dbReference = FIRDatabase.database().reference()
//reference to username in database
self.usersReference = dbReference.child("MH_Accounts").child(userNames[myIndex])//.queryOrdered(byChild: "username")
//data comes into a snapshot object
//self.usersReference.observeSingleEvent(of: .value, with: { (snapshot) in
//data comes into a snapshot object
self.usersReference.observe(.childAdded, with: { (snapshot) in
let snapshotValue = snapshot.value as! [String: AnyObject]
//use the key "username" to get the details of username
self.dbWeight = snapshotValue["weight"]! as! String
self.dbAge = snapshotValue["age"]! as! String
self.dbHeight = snapshotValue["height"]! as! String
self.dbActivityLevel = snapshotValue["activitylevel"]! as! String
self.lblUsername.text = userNames[myIndex]
self.lblActivityLevel.text = self.dbActivityLevel
self.lblWeight.text = self.dbWeight
self.lblAge.text = self.dbAge
self.lblHeight.text = self.dbHeight
})
firebase 的 JSON:
{
"MH_Accounts" : {
"admin" : {
"activitylevel" : "Light",
"age" : "44",
"email" : "f@f.com",
"gender" : "Male",
"height" : "170",
"password" : "password",
"weight" : "45"
},
"test123" : {
"activitylevel" : "Light",
"age" : "21",
"email" : "iO@hotmail.com",
"gender" : "Male",
"height" : "171",
"password" : "password",
"weight" : "83"
}
},
"MH_PlanRequest" : {
"test111" : {
"date" : "03-25-2016",
"plandesc" : "haha test2",
"plantype" : "Bulking",
"username" : "test111"
},
"test333" : {
"date" : "04-26-2017",
"plandesc" : "haha test",
"plantype" : "Weight Loss",
"username" : "test333"
}
},
"MH_Progress" : {
"admin" : {
"04-23-2017" : "https://firebasestorage.googleapis.com/v0/b/myhealth-5ee8b.appspot.com/o/images%2Fadmin04-23-2017.jpg?alt=media&token=c402f576-4e29-4809-9cb3-3c8849708129"
}
}
}
【问题讨论】:
-
不清楚你想要完成什么; userNames 是一个名称数组 ["Larry", "Curly", "Moe"] 所以说 dbReference.child("MH_Accounts")..child(["Larry", "Curly", "萌”])。您是否尝试访问这些特定节点?这里的目的是什么 - 更新您的问题,我们会尽力提供帮助。
-
@Jay Hey Jay,感谢您的意见。我编辑了整件事,希望让它更清楚。
-
能否请您包含您的 Firebase 结构的 sn-p,因为 TEXT 请不要图片? Firebase 控制台->三个点->导出 JSON。
-
@Jay 好的,完成了!
-
将 Dictionary
更改为 [String: AnyObject]
标签: swift firebase firebase-realtime-database