2016-03-19 24 views
0

OS X geliştirmesinde yeniyim ve NSTableView'da oluşturduğum verileri (yaklaşık 100000 satır) göstermek istediğimde, tablo görünümünün yenilenmesini buldum. çok düzgün değil. Her yeni veri üretildiğinde tablo görünümünün yenilenmesini istiyorum ve insanlar bu süreci kendi gözleriyle gerçekleştirebilirler. İşte 10 Çok fazla veri üretin ve gerçek zamanlı olarak NSTableView'a yükleyin

benim kod parçası:
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) 
    } 

Ben tableView yenilemek için ana iş parçacığı bildirmek ardından verilerini oluşturmak ve yeni bir iş parçacığı kullanmak, ama ne fark edebilirsiniz tableview yenilenir de bunun yaklaşık dört zamanlar. Kullanıcı arayüzünü daha verimli hale getirmek için bu kodu nasıl geliştirebilirim?

+0

Ana kuyrukta daha az iş yapın, yalnızca UI'yi başka bir şeyle güncellemediğinizden emin olun. – user3069232

+0

Evet, sadece reloaddata var ve ana dizideki son satıra kaydır. Veri oluşturma başka bir iş parçacığında – cotton

cevap

0

Eh,

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) 
        }) 
       } 
      } 

     } 

Sadece 100 kat Tableview en reloadData sürelerini azaltmak ... aptalca bir şekilde bu sorunu çözmek gibi görünüyor ve ben UI animasyon daha sorunsuz öncekinden daha olduğunu tespit ..