2017-10-03 1 views
0

내 데이터베이스 트리에 데이터를 검색스위프트 중포 기지가있는 tableview

enter image description here

안녕하세요, 내가있는 tableview에 데이터를 검색하려고하지만 중포 기지 데이터베이스에서 데이터를 읽을 수 있지만, 나는 테이블보기에서 표시 할 수 없습니다 . 내 코드가 아래에 있습니다, 당신이 나를 도울 수 있기를 바랍니다.

class Calls { 

var callType: String? 
var callHospital: String? 

init(callType: String?, callHospital: String?) { 
    self.callType = callType 
    self.callHospital = callHospital 
} 
} 

class myCallsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var ref:DatabaseReference! 
var myCallList = [Calls]() 

@IBOutlet weak var callListTableView: UITableView! 

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return myCallList.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "customcell", for: indexPath) as! myCallsViewControllerTableViewCell 

    let test = myCallList[indexPath.row] 
    cell.callType?.text = test.callType 
    cell.callHospital?.text = test.callHospital 

    return cell 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    callListTableView.dataSource = self 
    callListTableView.delegate = self 
    LoadCalls() 
} 

func LoadCalls() { 
    ref = Database.database().reference() 
    let userID = Auth.auth().currentUser?.uid 
    ref.child("calls").queryOrdered(byChild: "userID").queryEqual(toValue: userID!).observe(.childAdded, with: { (snapshot) in 
     if snapshot.childrenCount > 0{ 
     self.myCallList.removeAll() 
      for result in snapshot.children.allObjects as! [DataSnapshot]{ 
       let results = result.value as? [String : AnyObject] 
       let type = results?["calltype"] 
       let hospital = results?["hospital"] 
       let myCalls = Calls(callType: type as! String?, callHospital: hospital as! String?) 
       self.myCallList.append(myCalls) 
     } 
       self.callListTableView.reloadData() 
     } 
     }) 
} 
+0

당신은 내부 ** ** 인쇄 문을 넣어 주실 래요 for LoadCalls의 루프를 실행하고 결과를 표시합니다. – Siyavash

+0

다음과 같이 dump 문을 넣습니다. myCalls = Calls (callType :! String?, callHospital : hospital as String?) self.myCallList.append (myCalls) 덤프 (myCalls) 과 결과가 Kan_Bagisi_Portali.Calls # 0 - CALLTYPE : 전무 - callHospital : 전무 ▿ Kan_Bagisi_Portali.Calls # 0 - CALLTYPE : - callHospital 전무 : nil ▿ Kan_Bagisi_Portali.Calls # 0 - callType : nil - callHospital : nil .... this like –

+0

실제로 firebase에서 데이터를 수신하고 있는지 확인하고 싶습니다. 코드 – Siyavash

답변

0

당신의 문제는 아마 당신이 배경 스레드에서 UI를 업데이트하고 의미 폐쇄에서 reloadData()를 호출하고 있다는 사실과 관련이있다. 이 답변을 체크 아웃 : 나는 문제를 해결

Swift UITableView reloadData in a closure

+0

내가 시도했지만 어설 션 오류 - [UITableView _dequeueReusableCellWithIdentifier : forIndexPath : usingPresentationValues ​​:]가 충돌한다. –

+0

게시 한 코드에서 셀을 tableview에 등록하지 않았다. 너는 다른 곳에서 그걸하고 있니? https://stackoverflow.com/questions/12737860/assertion-failure-in-dequeuereable 셀에서 색인 경로를위한 식별자 – Blake

+0

예 @IBOutlet 약한 var callType : UILabel!으로 UITableViewCell에서 않습니다. IBOutlet weak call callHospital : UILabel! –

1

, 너무 많이, 너희들, 블레이크와 Siyavash 감사합니다. 내가 셀을 등록하고 디스패치 메인 큐를 넣으면 작동했다. 수준의 통화 {

var callType: String? 
var callHospital: String? 

init(callType: String?, callHospital: String?) { 
    self.callType = callType 
    self.callHospital = callHospital 
} 

}

클래스 myCallsViewController : 여기에 최신 코드의 UIViewController, UITableViewDelegate, UITableViewDataSource는 {

var ref:DatabaseReference! 
var myCallList = [Calls]() 

@IBOutlet weak var callListTableView: UITableView! 

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return myCallList.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "customcell", for: indexPath) as! myCallsViewControllerTableViewCell 

    let test = myCallList[indexPath.row] 
    cell.callType?.text = test.callType 
    cell.callHospital?.text = test.callHospital 

    return cell 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    callListTableView.dataSource = self 
    callListTableView.delegate = self 
    LoadCalls() 
} 

func LoadCalls() { 
    ref = Database.database().reference() 
    let userID = Auth.auth().currentUser?.uid 
    ref.child("calls").queryOrdered(byChild: "userID").queryEqual(toValue: userID!).observe(.childAdded, with: { (snapshot) in 
       let results = snapshot.value as? [String : AnyObject] 
       let type = results?["calltype"] 
       let hospital = results?["hospital"] 
       let myCalls = Calls(callType: type as! String?, callHospital: hospital as! String?) 
       self.myCallList.append(myCalls) 
       DispatchQueue.main.async { 
        self.callListTableView.reloadData() 
       } 
     }) 
} 
+0

No prob. 내 대답이 도움이된다면 받아들이겠습니까? – Blake

+0

굉장한 해피 코딩 :) – Siyavash

관련 문제