2015-06-03 3 views
12

Ich habe eine benutzerdefinierte UITableView Unterklasse, in der ich +accessInstanceVariablesDirectly überschreiben, um NO zurückzugeben, um sicherzustellen, dass Attribute ohne Setter nicht mithilfe von KVC festgelegt werden können.KVC in der UITableView-Unterklasse verursacht einen Absturz mit aktivierter Zugriffsmöglichkeit

Beim Entfernen dieser Tabellenansicht aus der Ansichtshierarchie stürzt die App - manchmal - ab und jetzt für den seltsamen Teil: nur wenn die Eingabehilfe aktiviert ist! (d. h. der Accessibility Inspector ist sichtbar, oder Sie haben Accessibility auf einem physischen Gerät aktiviert)

Wenn ich +accessInstanceVariablesDirectly nicht überschreibe, funktioniert alles einwandfrei. Ich denke, vielleicht UITableView stützt sich auf einige Instanz Variablen direkt zugreifen - aber was ist der Sinn dieser Methode, wenn ich Superklassen brechen kann, indem Sie es verwenden? Gibt es eine Möglichkeit, dieses Verhalten pro Attribut anzugeben, wie +automaticallyNotifiesObserversForKey:? Ich bin jedoch verblüfft darüber, dass dieses Problem nur auftritt, wenn die Eingabehilfe aktiviert ist.

Ich habe versucht, das Projekt mit verschiedenen Instrumenten zu analysieren, aber ohne Erfolg.

Sie können ein minimales Projekt finden, das das Problem reproduziert here. Ich würde mich sehr über Hinweise freuen, warum dies geschieht oder wie ich das erreichen kann, was ich will.

+0

Über diese Codezeile '[self perform: @selector (debug) withobject: nil afterDelay: 0,1] festgelegt werden;'. Kannst du stattdessen '' self performSelectorOnMainThread: withObject: waitUntilDone'? Ich bin nicht auf meinem MAC und ich frage mich, ob es, weil die Ansicht möglicherweise auf einen Hintergrund Thread gesetzt ist –

+0

'-performSelector:' führt seinen Selektor auf den gleichen Thread, der es aufgerufen wurde. Auch dies ist nur eine "Optimierung", um den Fehler zu reproduzieren, in meiner realen Anwendung werden die Ansichten als Antwort auf eine Benutzeraktion ersetzt, die offensichtlich auf dem Hauptthread passiert, –

+0

Ich führe die Demo, die Sie im Simulator geben (iOS 8.3 iphone5s) Es funktioniert gut, kein Crash! –

Antwort

2

Dieses Problem erscheint in iOS 9.

Verwandte Themen