2017-07-27 8 views
0

我正在通過使用firebase構建一個快速應用程序,在我的firebase數據庫中我有(兒童)餐廳的信息。我已成功將Firebase集成到我的項目中,並通過使用SDWebImage將帶有Firebase數據的TableView填充到圖像中。但是現在我遇到了另一個與使用segue相關的問題,並且在單擊我的tableview單元格時從我的firebase數據庫檢索正確的數據。在過去,我已經用detailViewControllers成功地創建了幾個swift和objective-c的tableviews,但這是我第一次使用firebase。 預先感謝您:) 這裏我下面我通過我的代碼在Xcode:如何通過點擊tableviewcell特定的Firebase數據到視圖控制器來接收?

主要泰伯維: 進口的UIKit 進口火力地堡 進口FirebaseAuth 進口FirebaseDatabase 進口FirebaseStorage 進口SDWebImage

類MainTableVC:UITableViewController {

@IBOutlet weak var MenuBar: UIBarButtonItem! 



var barName = [String]() 
var barMainImage = [String]() 
var barAddress = [String]() 





override func viewDidLoad() { 
    super.viewDidLoad() 

    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 

    self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: nil, action: nil) 



    MenuBar.target = self.revealViewController() 
    MenuBar.action = #selector(SWRevealViewController.revealToggle(_:)) 
    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 


    getDataFromServer() 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
func getDataFromServer(){ 
    Database.database().reference().child("aktau").observe(DataEventType.childAdded, with: { (snapshot) in 
     let values = snapshot.value! as! NSDictionary 
     let posts = values["barmain"] as! NSDictionary 
     let postIDs = posts.allKeys 
     for id in postIDs{ 
      let singlePost = posts[id] as! NSDictionary 
      self.barName.append(singlePost["barname"] as! String) 
      self.barAddress.append(singlePost["baraddress"] as! String) 
      self.barMainImage.append(singlePost["barmainimage"] as! String) 

     } 
     self.tableView.reloadData() 

    }) 
} 

// MARK: - Table view data source 

override func numberOfSections(in tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return barName.count 
} 


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "RestoCell", for: indexPath) as! ViewControllerCell 
    cell.RestName.text = barName[indexPath.row] 
    cell.RestAddress.text = barAddress[indexPath.row] 
    cell.RestImage.sd_setImage(with: URL(string: barMainImage[indexPath.row])) 


    return cell 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if (segue.identifier == "DetailView") { 

     let VC = segue.destination as! DetailViewController 
     VC.RestNameData = barName 


} 

}} 問題與barName - '?字符串'

無法指定類型的值 '[字符串]' 到類型

而我detailViewController 除了BarName,BarAddress和BarMainImage - 我想包括短杆信息和開放時間。

進口的UIKit 進口火力地堡 進口FirebaseAuth 進口FirebaseDatabase 進口FirebaseStorage 進口SDWebImage

類DetailViewController:UIViewController的{

@IBOutlet weak var MyScroll: UIScrollView! 




@IBOutlet weak var RestDetailView: UIView! 
@IBOutlet weak var restName: UILabel! 

@IBOutlet weak var restTypeOfFood: UILabel! 

@IBOutlet weak var restClockImage: UIImageView! 

@IBOutlet weak var restOpenHours: UILabel! 

@IBOutlet weak var restInfoView: UIView! 

@IBOutlet weak var averagePrice: UILabel! 

@IBOutlet weak var InfoAboutRest: UILabel! 

@IBOutlet weak var FullAddressLabel: UILabel! 

@IBOutlet weak var OpeningHoursLabel: UILabel! 

var RestNameData: String? 






override func viewDidLoad() { 
    super.viewDidLoad() 


    self.RestDetailView.layer.borderColor = UIColor.white.cgColor 
    self.RestDetailView.layer.borderWidth = 1 
    self.restInfoView.layer.borderColor = UIColor.white.cgColor 
    self.restInfoView.layer.borderWidth = 1 

    if RestNameData.text == "" { 

    } 

} 

}

我的火力地堡數據庫樹enter image description here

回答

1

以下是解決您遇到的問題的一種方法。首先,它是最好使用一個變量來保存你在表中顯示的對象的集合:即

// Define your model 
struct Bar { 
    var name: String 
    var image: String 
    var address: String 
} 

// Change your variables 
var bars = [Bar]() 
var selectedBar: Bar? 

其次,你需要獲得在細胞的選擇一個bar對象。即

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{ 
    selectedBar = bars[indexPath.row]   
} 

在segueing,您可以將其注入到你的detailsVC像這樣:

details.selectedBar = selectedBar 

你已經完成selectedBar對象誇大你的用戶界面,而不是隻是一個String

樣本添加:我創建了一個具有所需功能的樣本。拉代碼時執行吊艙安裝。這裏是我的數據庫是什麼樣子:

enter image description here

庫:https://github.com/HassanSE/FirebaseSample

+0

我已經添加了解決該問題的代碼。 –

+0

不幸的是我真的沒有得到結構)嘗試了幾種方法,但我仍然會得到一個錯誤) – didayo

相關問題