2017-12-07 9 views
1

요청을 받고 데이터를 가져 와서 10 개의 배열로 나눕니다. 2 초가 걸립니다. 그러나 그들을 UICollectionView으로 분류하면 거의 10 초 동안 데이터가 표시됩니다. UICollectionview 느린 데이터 다시로드

func makeRequest() { 
    let url = URL(string: "https://api.example.com/v1/ticker/?start=" + "\(startingPoint)") 
    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in 
     if error != nil { 
      print(error!) 
     } else { 
      if let urlContent = data { 
       do { 
        let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as! [AnyObject] 
        var i: Int! 
        for i in 0..<jsonResult.count { 
         Global.rankArray.append(String(describing: jsonResult[i]["rank"]!!)) 
         // 9 other similar lines 
        } 
        // Loading some views 
        self.dataCollection.reloadData() 
       } catch { 
        print("Error") 
       } 
      } 
     } 
    } 
    task.resume() 
} 

그래서 내가 빨리 모든 것을 인쇄 할 수 있지만, UICollectionView 10까지 초 통과에 데이터가 표시되지 않은 : 여기 내 코드입니다. 로딩 시간은 인터넷 연결 속도에 의존하지 않습니다.

답변

3

문제는 백그라운드 스레드에서 UICollectionView를 다시로드하고 있다는 것입니다. 뷰를 즉시 업데이트해야하는 항목은 주 스레드에서 실행해야합니다. 다시로드 문 변경 :

DispatchQueue.main.async { 
     self.dataCollection.reloadData() 
    }