Possiedo un NSTableView che interrompe a intermittenza l'animazione e l'aggiornamento in modo corretto, causando un'esperienza utente terribile.Animazione NSTableView incoerente
let oldRows = filteredDocuments
let newRows = newFilteredDocuments
let diff = oldRows.diff(newRows)
filteredDocuments = newFilteredDocuments
if (diff.results.count > 0) {
let deletionIndexPaths = NSMutableIndexSet()
diff.deletions.forEach { deletionIndexPaths.addIndex($0.idx) }
let insertionIndexPaths = NSMutableIndexSet()
diff.insertions.forEach { insertionIndexPaths.addIndex($0.idx) }
self.tableView?.beginUpdates()
self.tableView?.removeRowsAtIndexes(deletionIndexPaths, withAnimation: NSTableViewAnimationOptions.EffectFade)
self.tableView?.insertRowsAtIndexes(insertionIndexPaths, withAnimation: NSTableViewAnimationOptions.SlideLeft)
self.tableView?.endUpdates()
}
Non sembra esserci alcuna logica a quando si ferma l'animazione, e nei numerosi test che ho fatto ci si sente quasi come se fosse a costruire relativo. È interessante notare che non smette mai di animare quando sto profilando ...
È come se qualcosa sul thread principale intasasse l'interfaccia utente e quindi NSTableView andasse in timeout e annulli l'aggiornamento - ma non ho idea di come sia possibile eseguire il debug di questo .
Credo che tutto si può fare è assicurarsi che tutto il codice di cui sopra è in esecuzione sul thread principale (avvolgilo in 'dispatch_async (dispatch_get_main_queue(), {...}') e prova il dispacciamento del lavoro che potrebbe bloccare un thread in background e vedere se migliora. Forse alcune istruzioni di log posizionate in modo intelligente ti aiuteranno a garantire che questo codice venga chiamato al momento giusto Le viste in tabella sono difficili da eseguire per il debug. –
Questa domanda non contiene informazioni sufficienti per riprodurre il problema. [mcve] – jtbandes
Puoi allegare un progetto di esempio che riproduce il problema? – JAL