2009-12-14 7 views
13

La mia app si arresta in modo anomalo quando viene rilasciato il mio UITableView durante l'animazione. L'app funziona senza problemi finché l'animazione è completata. Qui di seguito è il risultato di un rubinetto sul UIButton che chiama [tableView setContentOffset:offset animated:YES]; e poi un fulmine tap veloce sul backBarButtonItem che si apre il UITableViewController:C'è un modo per cancellare un UITableView/UIScrollView animato setContentOffset: animato :?

#0 0x31ec3ebc in objc_msgSend 
#1 0x33690248 in -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded] 
#2 0x30defa14 in -[NSObject performSelector:withObject:] 
#3 0x33690098 in -[UIAnimator stopAnimation:] 
#4 0x3368fb7c in -[UIAnimator(Static) _advance:] 
... 

Non ho mai visto un incidente sul _scrollViewAnimationEnded e apparentemente nessuno dei due ha Google. Ho provato a chiamare [tableView setContentOffset:offset animated:NO]; dal metodo - (void)viewWillDisappear:(BOOL)animatedUITableViewController, ma questo non ha risolto il problema.

Qualche idea per fermare uno UITableView o UIScrollView nel bel mezzo dell'animazione?

risposta

28

Sembra che potrebbe trattarsi di un problema di delegato. Avete un delegato per il tavolo e, in caso affermativo, è dealloc'd quando il tavolo è? Prova a prelevare il delegato di tableView prima di rilasciarlo.

[Il tableView è trattenuto da Core Animation mentre è l'animazione, in modo che probabilmente non è il problema.]

+1

Non sto rilasciando esplicitamente la tavola view - il problema si è verificato quando il controller è stato estratto dalla vista (e se richiesto dal controller di navigazione rimosso dalla memoria). Comunque, penso che l'hai risolto ... da quando assegno e annullando il delegato della vista tabella quando la vista apparirà/scomparirà non sono stato in grado di riprodurre questo crash. Grazie! –

+3

A proposito, ho visto questo crash anche quando si utilizza ARC. Assicurati di annullare manualmente i delegati della tabella! – MikecheckDev

1

Credo che il problema con voi è che si stanno rilasciando la matrice origine dati, prima di rilasciare il tableView. provare a controllare questo fuori anche nel dealloc

0

Ciò può accadere se è stato inserito un controllo di rigenerazione in una vista tabella come una visualizzazione secondaria (il mio suggerimento, mai farlo) ...