2012-08-24 14 views
7

Ciągle otrzymuję następujący błąd, gdy odrzucenie słownika, który otwiera się z dotykając Zdefiniuj na UIMenuController w UIWebView na iPhone: -_UIFallbackPresentationViewController

Unbalanced calls to begin/end appearance transitions for <_UIFallbackPresentationViewController: 0x10ab9640>. 

A po tym błędu, UIMenuController przestanie pojawiać się w dowolny UIWebView.

Jakieś pomysły, co się tutaj dzieje?

AKTUALIZACJA: Błąd faktycznie pojawia się, gdy otwierany jest widok słownika, a nie podczas jego zamykania.

UPDATE 2: Błąd jest szeroki. Wszędzie tam, gdzie można wybrać tekst (np. Przeglądanie stron, widok tekstowy itp.) Mogę używać tylko definicji słownika jeden raz. Ten błąd pojawia się &, a następnie muszę opuścić aplikację & ponownie uruchomić, aby użyć słownika.

+1

FYI. Widzę to samo ostrzeżenie na Symulatorze i urządzeniu, ale menu i słownik dalej działają dla mnie później. –

+0

@Mike Weller: Szkoda, że ​​nie było tak samo dla mnie, mam dwie aplikacje. W jednej aplikacji, słowniku i menu, oba nadal działają, pomimo ostrzeżenia. W przypadku drugiej aplikacji słownik przestaje działać po raz pierwszy. Nie można nawet ponownie wyświetlić menu po wyświetleniu słownika. –

+0

Czy masz jakieś szalone informacje o hierarchii kontrolerów widoku? Podobnie jak bezpośrednio wstawiając widoki kontrolera widoku bez korzystania z poprawnych interfejsów API ograniczania dostępu? –

Odpowiedz

4

W końcu znalazłem odpowiedź na to. Kiedy słownik zostanie przedstawiony przez system, jego okno staje się aktywne (zobacz makeKeyAndVisible: w UIWindow), co jest świetne. Problem pojawia się, gdy zwalniamy okno, w którym znajduje się słownik, nie oddaje głównego okna aplikacji.

Jeśli wydrukujesz [UIApplication sharedApplication] .keyWindow przed i po wyświetleniu słownika, zobaczysz, jak przed okienkiem aplikacji było keyAndVideo, a potem jest inne okno. Dla mnie miałem osobne okno dla wiadomości o aplikacjach, które znajdowały się na pasku stanu, i to było to, co było keyAndVisible po zwolnieniu słownika.

Więc wszystko, co musiałem zrobić, aby naprawić to było mieć następującą metodę obejścia w moim UIWindow podklasy że niewłaściwie odebrany ostrości:

- (void) makeKeyWindow { 
    AppDelegate * appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDelegate.window makeKeyAndVisible]; 
} 

Nie jestem pewien, jak to będzie działać dla tych, jeśli cię bez twojej własne UIWindow, na którym się koncentrujemy, ale absolutnie najgorszy możliwy przypadek, w którym można dodać fikcyjny UIWindow, który otrzyma fokus i doda dokładnie ten sam fragment kodu z góry.

+0

Co masz na myśli przez "mają następujące metody nadpisania w mojej podklasy UIWindow"? Jedyne zdarzenie UIWindow w moim projekcie jest w appDelegate i jeśli zrobię podklasę i wstawię funkcję i nadpisam metodę makeKeyWindow, to nie zadziała, ponieważ makeKeyWindow dostaje nieskończoną rekursję. : -S – Sufian

+0

@Sufian Spróbuj użyć protokołu nslog, aby uzyskać wynik [UIApplication sharedApplication] .keyWindow po przedstawieniu i odrzuceniu słownika. Pomocny może być poniższy kod. NSLog (@ "% @", [UIApplication sharedApplication] .keyWindow); W moim przypadku użyłem nakładki paska stanu, która stała się kluczowym oknem. Rejestracja dla UIWindowDidBecomeKeyNotification w mojej klasie nakładki na statusbar i wywołanie kodu Acue podanego powyżej, kiedy powiadomienie zostało wysłane, naprawiło ten problem dla mnie. –

+0

Skąd wiadomo, że słownik został przedstawiony lub odrzucony? Metody viewWillAppear i viewWillDisappear nie są wywoływane. Czy mógłbyś rozwinąć trochę więcej? – Sufian

1

Komunikat o błędzie sugeruje rozpoczęcie przejścia, ale brakuje wywołania odpowiedniej metody zakończenia.

  • Czy próbowałeś przejść bez animacji? (animated: NO)

  • Czasami pojawia się to zachowanie podczas korzystania z instrukcji switch i zapominając break;

  • Jeśli przeprowadzasz seque, zrób to w -viewDidAppear zamiast -viewWillAppear

nadzieję, że pomógł troszkę! :)

+0

Dzięki za wysiłek, ale nie robię przejścia, system jest, ponieważ słownik jest prezentowany przez domyślny system UIMenu. Każda pomoc, w jaki sposób mogę usunąć animację z niego, byłaby doceniona. oświadczenie, ani nie wykonuję seque. Jeszcze raz dziękuję za wysiłek! :-) –