2015-06-03 12 views
12

Mam niestandardową podklasę UITableView, w której przesłonię +accessInstanceVariablesDirectly, aby zwrócić NO, aby upewnić się, że atrybuty bez ustawnika nie mogą być ustawione za pomocą KVC.KVC w podklasie UITableView powodującej awarię z włączoną dostępnością

Podczas usuwania tego widoku tabeli z hierarchii widoków, aplikacja ulega awarii - czasami - i teraz w przypadku dziwnej części: tylko jeśli funkcja ułatwień dostępu jest włączona! (np. inspektor dostępności jest widoczny lub masz włączoną opcję Dostępność na urządzeniu fizycznym)

Jeśli nie zastąpię +accessInstanceVariablesDirectly, wszystko działa poprawnie. Pomyślałem, że może UITableView polega na bezpośrednim dostępie do niektórych zmiennych instancji - ale jaki jest sens tej metody, jeśli mogę złamać nadklasy przez jej użycie? Czy istnieje sposób na określenie tego zachowania na atrybut, np. +automaticallyNotifiesObserversForKey:? Jednak jestem zaskoczony faktem, że problem ten występuje tylko wtedy, gdy włączono Ułatwienia dostępu.

Próbowałem analizować projekt za pomocą różnych instrumentów, ale bez powodzenia.

Możesz znaleźć minimalny projekt odtwarzający numer here. Byłbym bardzo wdzięczny za wszelkie wskazówki, dlaczego tak się dzieje i jak osiągnąć to, co chcę mimo wszystko.

+0

O tej linii kodu '[self performSelector: @selector (debug) withObject: nil afterDelay: 0.1];'. Czy można zamiast tego użyć 'self selectionSelectorOnMainThread: withObject: waitUntilDone'? Nie jestem na moim MAC i zastanawiam się, czy to dlatego, że widok jest ustawiony na prawdopodobnie wątku tła –

+0

'-performSelector:' wykonuje swój selektor w tym samym wątku, który został wywołany. Jest to po prostu "optymalizacja" do odtworzenia błędu, w mojej prawdziwej aplikacji widoki są zastępowane jako odpowiedź na akcję użytkownika, która oczywiście dzieje się w głównym wątku, –

+0

Uruchamiam demo, które dajesz w symulatorze (ios 8.3 iphone5s) , działa dobrze, bez awarii! –

Odpowiedz

2

Ten problem wydaje się być rozwiązany w iOS 9.

Powiązane problemy