我试图通过didSelectRowAt将我的TableViewCell中的用户名传递给另一个表单。 TableViewCell中的用户名是通过Array
生成的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"
}
}
}
答案 0 :(得分:0)
括号表示该类型是一个字符串数组。看起来self.usersReference
是一个字符串,.child(usernames)
返回一个数组。您必须弄清楚是否要从数组中获取元素,或者您是否首先调用正确的方法。
我不知道Firebase所以无法帮助那里。