Firbase에서 데이터를 올바르게 출력하는 데 문제가 있습니다. 나는 많은 시간을 보냈고 이것을 수행하는 많은 다른 방법을 시도했다. 다른 데이터 구조 등을 만들었지 만 나는 항상 충돌이나 무관하게 결과를 얻을 것이다. 현재 코드가 작동하고 파이어베이스에서 테이블 뷰로 데이터를 출력하지만 배열이 정렬되지 않고 특정 사용자의 한 배열에있는 필드가 다른 테이블과 관련이 없으며 올바르지 않습니다.Firebase/Swift - 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? –