2012-08-24 12 views
7

continuo a ricevere il seguente errore quando ho respingere il dizionario che si apre da intercettazioni Definire sulla UIMenuController in un UIWebView su iPhone: -_UIFallbackPresentationViewController

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

E dopo questo errore, l'UIMenuController smette di rivelare, in qualsiasi UIWebView.

Qualche idea cosa sta succedendo qui?

UPDATE: L'errore si verifica in realtà quando la vista del dizionario si apre, non quando la si chiude.

UPDATE 2: L'errore è a livello di applicazione. Ovunque ci sia un testo selezionabile (ad es. Webview, textview, ecc.) Posso usare il dizionario definitivo solo una volta. Questo errore mostra & quindi, devo uscire dall'app & avviarlo di nuovo, per usare il dizionario.

+1

FYI. Posso vedere lo stesso avviso sul simulatore e sul dispositivo, ma il menu e il dizionario continuano a funzionare anche dopo. –

+0

@Mike Weller: Vorrei che fosse lo stesso per me, ho due app. In una app, nel dizionario e nel menu, entrambi continuano a funzionare, nonostante l'avviso. Per la seconda app, però, il dizionario smette di funzionare dopo la prima volta. Non è nemmeno possibile visualizzare nuovamente il menu, una volta che il dizionario è stato presentato. –

+0

Avete in corso cose da pazzi sulla gerarchia dei controller di visualizzazione? Come inserire direttamente le viste del controller di visualizzazione senza utilizzare le API di contenimento corrette? –

risposta

4

Finalmente trovato una risposta per questo. Quando il dizionario viene presentato dal sistema, la sua finestra viene messa a fuoco (vedi makeKeyAndVisible: in UIWindow), che è grandiosa. Il problema si presenta quando si elimina la posizione in cui la finestra che contiene il dizionario non restituisce correttamente il fuoco posteriore della finestra principale dell'applicazione.

Se si stampa [UIApplication applicationApplication] .keyWindow prima e dopo che il dizionario viene presentato, si vedrà come prima la finestra dell'applicazione era keyAndVisible e successivamente è una finestra diversa. Per quanto mi riguarda, avevo una finestra separata per i messaggi delle app che vivevano in cima alla barra di stato, e quella era la chiave keyAndVisible dopo che il dizionario era stato chiuso.

Quindi tutto quello che aveva a che fare per risolvere il problema era avere il seguente metodo di sostituzione nel mio UIWindow sottoclasse che erroneamente ricevuto attenzione:

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

io non sono sicuro di come questo lavoro per coloro che se senza il tuo possedere UIWindow su cui focalizzarsi, ma nel peggiore dei casi è possibile aggiungere un UIWindow fittizio che riceverebbe lo stato attivo e aggiungere lo stesso pezzo di codice dall'alto.

+0

Cosa intendi con "avere il seguente metodo di sovrascrittura nella sottoclasse UIWindow"? L'unica occorrenza di UIWindow nel mio progetto è in appDelegate e se creo la sottoclasse e inserisco la funzione e sovrascrivo il metodo makeKeyWindow, non funzionerà perché makeKeyWindow si trasforma in ricorsione infinita. : -S – Sufian

+0

@Sufian Provare a utilizzare nslog per ottenere il risultato di [Applicazione condivisa UIA] .keyWindow dopo che il dizionario è stato presentato e ignorato. Il seguente codice potrebbe aiutare. NSLog (@ "% @", [UIApplication sharedApplication] .keyWindow); Nel mio caso, stavo usando una sovrapposizione della barra di stato che stava diventando la finestra chiave. Registrazione per UIWindowDidBecomeKeyNotification nella mia classe di overlay della barra di stato e chiamando il codice di accesso fornito sopra quando la notifica è stata pubblicata ha risolto il problema per me. –

+0

Come faccio a sapere se il dizionario è stato presentato o ignorato? I metodi viewWillAppear e viewWillDisappear non vengono chiamati. Puoi per favore elaborare un po 'di più? – Sufian

1

Il messaggio di errore suggerisce di avviare una transizione ma manca la chiamata al metodo di fine corrispondente.

  • Hai provato a eseguire la transizione senza animazione? (animated: NO)

  • A volte questo comportamento appare quando si utilizza uno switch e dimenticare il break;

  • Se si sta eseguendo un seque, lo fanno in -viewDidAppear invece di -viewWillAppear

speranza che aiutato un po '! :)

+0

Grazie per lo sforzo, ma non sto facendo la transizione, il sistema è, come il dizionario è presentato dal sistema predefinito UIMenu.Qualsiasi aiuto con come potrei rimuovere l'animazione da esso sarebbe apprezzato. Non ho un interruttore dichiarazione, né sto eseguendo un sequel. Grazie ancora per lo sforzo! :-) –