2016-03-19 8 views
0

私はOS Xの開発が初めてで、NSTableViewで生成したデータ(約100000行)を表示したいときは、非常にスムーズにはありません。新しいデータが生成されるたびにテーブルビューをリフレッシュして、そのプロセスを目で確認することができます。多くのデータを生成し、リアルタイムでNSTableViewにロード

は、ここに私のコードの一部です:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {() -> Void in 

     //var endTime: NSTimeInterval! 

     for i in 1...100000 { 
      //generate 
      self.models.append(DBMSModel(time: self.generateTime(NSTimeInterval(i)), money: Float(i), payType: self.payType[i % 4], payPlace: self.place[i % 4]).contentData) 

//    endTime = NSDate().timeIntervalSince1970 

      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       self.mainTableView.reloadData() 

       let numOfRows = self.mainTableView.numberOfRows 

       if numOfRows > 0 { 
        self.mainTableView.scrollRowToVisible(numOfRows - 1) 
       } 
      }) 

     } 

     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.performSegueWithIdentifier("ResultAlert", sender: endTime - startTime) 
     }) 
//   self.performSegueWithIdentifier("ResultAlert", sender: endTime - startTime) 
    } 

私はデータを生成するための新しいスレッドを使用して、テーブルビューをリフレッシュするメインスレッドに通知しますが、私が実現できることはテーブルビューは、ちょうど約4をリフレッシュしていることです回。このコードを改善して、UIをより効率的にリフレッシュさせるにはどうすればよいですか?

+0

メインキューでの作業が少なくて済み、UIだけを更新してください。 – user3069232

+0

はい、リロードデータがあり、メインスレッドの最後の行までスクロールします。データの生成は別のスレッドにあります – cotton

答えて

0

まあ、私は愚かな方法でこの問題を解決するように見える...

for i in 1...100000 { 
      //generate 
      self.models.append(DBMSModel(time: self.generateTime(NSTimeInterval(i)), money: Float(i), payType: self.payType[i % 4], payPlace: self.place[i % 4]).contentData) 

      endTime = NSDate().timeIntervalSince1970 

      if i > 100 { 
       if i % (i/100) == 0 { 
        dispatch_async(dispatch_get_main_queue(), {() -> Void in 
         self.mainTableView.reloadData() 

         self.mainTableView.scrollToEndOfDocument(nil) 
        }) 
       } 
      } 

     } 

ちょうど100倍にテーブルビューのreloaddata時間を短縮し、私はUIのアニメーションがよりスムーズに以前よりであることがわかりました。..

関連する問題