2017-12-31 31 views
0

나는 firebase에서 데이터를 가져 와서 테이블보기에 표시하는 중입니다. 데이터를받은 배열을 채 웁니다 및 테이블 뷰를 채우기 위해 배열을 사용하지만 데이터가 표시되지 않습니다.사용자가보기 전에 배열을 테이블보기로 표시하기

배열이 채워지기 전에 tableview가로드된다는 점을 깨달았습니다. viewdidload에 reloadData를 넣으려고 시도했지만 표시되고 깨끗하게 보이지 않으면 데이터가 팝업됩니다.

전환이 원활 해 지도록보기가 나타나기 전에 데이터를로드하도록 테이블 뷰를 얻으려면 어떻게해야합니까?

이 코드는 내있는 viewDidLoad 방법 내부 :

let categoryRef = Database.database().reference().child("category/\(category)") 
    let user = Auth.auth().currentUser 
    if let user = user { 
     let uid = user.uid 
     categoryRef.observeSingleEvent(of: .value, with: { (snapshot) in 
      if snapshot.hasChildren(){ 
       for child in (snapshot.value as? NSDictionary)! { 
        if let object = child.value as? [String:AnyObject]{ 
         let name = object["name"] as! String 
         self.nameArray.append(name) 
         self.categoryDict["\(name)"] = child.key as! String 
        } 

       } 
      } 

     }) 
    } 

} 

답변

0

모든 아이들 추가 직후에 데이터를 다시로드하십시오 :

let categoryRef = Database.database().reference().child("category/\(category)") 
    let user = Auth.auth().currentUser 
    if let user = user { 
     let uid = user.uid 
     categoryRef.observeSingleEvent(of: .value, with: { (snapshot) in 
      if snapshot.hasChildren(){ 
       for child in (snapshot.value as? NSDictionary)! { 
        if let object = child.value as? [String:AnyObject]{ 
         let name = object["name"] as! String 
         self.nameArray.append(name) 
         self.categoryDict["\(name)"] = child.key as! String 
        } 

       } 
       self.tableView.reloadData() 
      } 

     }) 
    } 

} 
+0

도와 드리겠습니다. 그게 효과가 있다면, upvote 및 정답으로 표시하여 문제가있는 다른 사람들이 솔루션을 볼 수 있도록 :) – barbarity

0

전화 func insertSections(IndexSet, with: UITableViewRowAnimation)를 대신하지만를 호출 내부에 그것을 포장 기억 beginUpdatesendUpdates. 또한 메인 큐에서 UI를 업데이트해야합니다.

categoryRef.observeSingleEvent 

가 비동기

0

때문에, 당신은 블록 완료 후 테이블 뷰를 다시로드해야하는 방식 @barbarity는 제안한다. 당신이 매끄러운 전환을 원하는 경우

, 당신의 ViewController를 제시하기 전에이 전화

let categoryRef = Database.database().reference().child("category/\(category)") 

를 시작 배열을 설정하고 다음을 제시한다.

하지만,있는 viewDidLoad에 데이터를로드 시작하고 UI의 로딩 메커니즘 (회 전자)

+0

설명 해 주셔서 감사합니다! 테이블 뷰는 언제로드됩니까? 그것은 viewdidload 메서드 또는 테이블 뷰의 대리자를 설정할 때마다? –

+0

viewDidLoad에서 모든 것이 설정되면 호출됩니다. 그렇지 않으면 다시로드해야합니다. –

0

난 당신이 느낌을 감지하게됩니다 다른 뷰를 만들 수있는 생각을 가지고있다 비동기 처리와 대부분의 경우에서 연습 데이터 준비가 완료되면 '데이터 팝'이 표시됩니다. 있는 tableview이 (목표 - C에서) 준비를 위해

극단적 인 조건으로

, 당신은 전체의 tableview를 숨기거나 심지어 화면에 작업 표시를 보여, 다음의 tableview을 표시하고 datas 후 표시를 숨기려고 할 수 있습니다

- (void)viewDidLoad { 

    //do init work ... 

    self.tableview.hidden = YES; 
    [self showIndicator]; 
    [self requestDataFinish:^{ 
      self.tableview.hidden = NO; 
      [self hideIndicator]; 
      [self.tableview reload]; 
    }];   

}