Firbaseから正しくデータを出力できません。私は何時間も費やして、これを行うさまざまな方法を試みました。異なるデータ構造などを作成しましたが、私はいつもクラッシュまたはゼロ出力を得ていました。私の現在のコードは動作しており、firebaseからテーブルビューにデータを出力していますが、配列が整列しておらず、特定のユーザのフィールドのフィールドが他のフィールドと関連していないので正しくありません。Firebase/Swift - Firebaseからのデータ出力が間違っていました
これを行うためのより良い方法ですので、これを使って正しい方向に何か助けや指摘があれば大いに感謝します。また、私に簡単にアクセスしてください、私はこれを知っていたよ:)
これは私のfirebase構造である:
これは私のレンタルモデルである:
struct RentalObjects {
var title: [String : AnyObject] = [:]
var rentalType: [String : AnyObject] = [:]
var dateAval: [String : AnyObject] = [:]
var location: [String : AnyObject] = [:]
var price: [String : AnyObject] = [:]
var bond: [String : AnyObject] = [:]
var pets: [String : AnyObject] = [:]
var descripton: [String : AnyObject] = [:]
}
これは私ですテーブルビューに出力するVCのコード:
import UIKit
import FirebaseDatabase
class RentalTableViewVC: UIViewController, UITableViewDataSource, UITableViewDelegate{
@IBOutlet weak var rentalImage: UIImageView!
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var rentalTitle: UILabel!
@IBOutlet weak var rentalPrice: UILabel!
var rentalsObject = RentalObjects()
var databaseRef:DatabaseReference?
var handle: DatabaseHandle?
var arrayOfTitles = [String?]()
var arrayOfBond = [String?]()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return rentalsObject.title.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell")
for (_, value) in rentalsObject.title {
arrayOfTitles.append(value as? String)
}
for (_, value) in rentalsObject.bond {
arrayOfBond.append(value as? String)
}
cell.textLabel?.text = ("Title: \(String(describing: arrayOfTitles[indexPath.row]!)), Bond: \(String(describing: arrayOfBond[indexPath.row]!))")
return cell
}
@IBAction func backPressed(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
databaseRef = Database.database().reference().child("Rentals")
databaseRef?.observe(DataEventType.value, with: { (snapshot) in
for rentals in snapshot.children.allObjects as! [DataSnapshot] {
switch rentals.key {
case "title" :
let titleObj = rentals.value as! [String : AnyObject]
self.rentalsObject.title = titleObj
case "rentalType":
let rentalTypeObj = rentals.value as! [String : AnyObject]
self.rentalsObject.rentalType = rentalTypeObj
case "dateAval":
let dateAvalObj = rentals.value as! [String : AnyObject]
self.rentalsObject.dateAval = dateAvalObj
case "location":
let locationObj = rentals.value as! [String : AnyObject]
self.rentalsObject.location = locationObj
case "price" :
let priceObj = rentals.value as! [String : AnyObject]
self.rentalsObject.price = priceObj
case "bond" :
let bondObj = rentals.value as! [String: AnyObject]
self.rentalsObject.bond = bondObj
case "pets" :
let petsObj = rentals.value as! [String: AnyObject]
self.rentalsObject.pets = petsObj
case "description":
let desObj = rentals.value as! [String: AnyObject]
self.rentalsObject.descripton = desObj
default:
break
}
}
self.tableView.reloadData()
})
}
}
こんにちはa.afanasiev、IVEは今、この作業を取得するために管理が、私は私の以前のコードで以前と同じ問題を抱えています。配列からの出力は、それらがお互いに整列しないようにする何か変なことをしているように見えます。以下のコードを読みやすくするために別の質問に投稿しました。 –
こんにちはa.afanasiev、iveはこれを今すぐ利用することができましたが、以前のコードと同じ問題が発生しています。配列からの出力は、それらがお互いに整列しないようにする何か変なことをしているように見えます。 ViewDidLoad関数内から配列を印刷すると正しいと思われますが、ラベルに出力したり、cellForRowAt関数内から印刷すると配列は重複して見えます。なぜそれが起こるのだろうか? –
'numberOfRowsInSection'メソッドで何を返すのですか? rentalsObject.title.countまたはarrayOfTitles.count? –