2015-06-03 16 views
12

Ho una sottoclasse personalizzata UITableView in cui sovrascrivo +accessInstanceVariablesDirectly per restituire NO al fine di garantire che gli attributi senza setter non possano essere impostati utilizzando KVC.KVC nella sottoclasse UITableView che causa crash con accessibilità abilitata

Quando si rimuove questa vista tabella dalla gerarchia della vista, l'app si arresta in modo anomalo - a volte - e ora per la parte strana: solo se l'accessibilità è abilitata! (Ad esempio, l'ispettore di accessibilità è visibile o l'accessibilità è abilitata su un dispositivo fisico)

Se non si esegue l'override di +accessInstanceVariablesDirectly, tutto funziona correttamente. Ho pensato che forse UITableView si basa sull'accesso diretto ad alcune variabili di istanza - ma allora qual è il punto di questo metodo, se riesco a rompere le superclassi usandolo? C'è un modo per specificare questo comportamento per-attributo, come +automaticallyNotifiesObserversForKey:? Tuttavia, sono sconcertato dal fatto che questo problema esiste solo quando l'accessibilità è abilitata.

Ho provato ad analizzare il progetto con vari strumenti, ma senza successo.

È possibile trovare un progetto minimo che riproduce il problema here. Apprezzerei molto ogni suggerimento sul perché questo sta accadendo o su come ottenere ciò che voglio comunque.

+0

su questa linea del codice '[auto performSelector: @selector (debug) withObject: nil afterDelay: 0,1];'. Puoi invece fare un '[self performSelectorOnMainThread: withObject: waitUntilDone'? Non sono sul mio MAC e mi chiedo se è perché la vista è impostata su un possibile thread di sfondo –

+0

'-performSelector:' esegue il suo selettore sullo stesso thread che è stato chiamato. Anche questa è solo una 'ottimizzazione' per riprodurre il bug, nella mia vera applicazione le viste vengono sostituite come risposta a un'azione dell'utente che ovviamente avviene sul thread principale, –

+0

Eseguo la demo che dai al simulatore (ios 8.3 iphone5s) , funziona bene, nessun incidente! –

risposta

2

Questo problema sembra essere risolto in iOS 9.

Problemi correlati