2012-03-15 7 views
7

Ho un'app basata su un UISplitViewController che mostra un foglio di lavoro nel MasterViewController della divisione. Prima di iOS 5.1, non ho avuto problemi a presentare il foglio di azione nel popover presentato dallo split, ma ora, apparentemente, c'è qualcosa di sbagliato nel nuovo modo "slide-in" di mostrare il MasterController.iOS 5.1 + UISplitViewController in PortraitMode + UIActionSheet in MasterController = Errore di asserzione

Il fatto è che quando provo a presentare ActionSheet, utilizzando qualsiasi metodo [actionSheet show ..], l'app si arresta in modo anomalo con il seguente errore (L'Asserzione esatta è la seguente).

*** Assertion failure in -[UIActionSheet presentSheetInPopoverView:], /SourceCache/UIKit_Sim/UIKit-1914.84/UIActionSheet.m:1816 
sharedlibrary apply-load-rules all 
Error in re-setting breakpoint 1: 
Catchpoint 2 (throw)Error in re-setting breakpoint 1: 
Error in re-setting breakpoint 1: 
Current language: auto; currently objective-c 

I google per un po ', ma nessuno risponde sostanziali .. alcune persone dicono che può essere un bug nella nuova SplitViewController ...

idee?

Grazie in anticipo!

AGGIORNAMENTO: Ho inviato una possibile soluzione alternativa, verificarlo. Se funziona per te, lascia un commento .... Se è ok, lo contrassegnerò come corretto in un paio di giorni

+0

Bene, qual è l'affermazione attuale? Dacci il messaggio dalla console. –

+0

Ho modificato le domande con l'affermazione esatta ..grazie – Omer

+0

Abbiamo bisogno delle prossime dieci linee successive nella console. –

risposta

2

Ho lo stesso problema anche io.

Una soluzione che impedisce il crollo almeno è quello di mostrare i tuoi UIActionSheet come questo:

if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) { 
    [self.actionSheet showFromBarButtonItem:sender animated:YES]; 
} else { 
    [self.actionSheet showInView:self.view.window]; 
} 

Quindi, in modalità verticale, il foglio di azione viene visualizzata al centro della finestra. Non ideale, ma almeno non si blocca. E quando è in modalità orizzontale, si comporta normalmente.

+0

controlla la mia risposta e commenta la tua opinione – Omer

0

Un'altra opzione per mantenere il popover influenza di puntare ad una particolare opzione, si può effettivamente fare quanto segue: 1. Creare il proprio UIPopover 2. Creare la tua UIViewController all'interno della UIPopover. 3. Visualizzare UIActionSheet all'interno del nuovo UIViewController. 4. SetPopoverContentSize dalla dimensione del UIActionSheet. 5. Infine, cablate il metodo Clic del vostro UIActionsheet per eliminare il popover.

Prende un po 'di codice in più, ma offre la stessa funzionalità che aveva in precedenza per la maggior parte e ha un effetto slide-in molto interessante per UIActionsheet.

+0

controlla la mia risposta e commenta la tua opinione – Omer

0

penso che la segue è una soluzione generica in base alla risposta del Tap Forma:

CGRect windowsRect = [actionSheetContainerView convertRect:viewToPresentActionSheet.frame toView:actionSheetContainer.window]; 
[actionSheet showFromRect:windowsRect inView:actionSheetContainer.window animated:YES]; 

Questo si risentiranno l'actionSheet nella finestra, ma indicando la direzione giusta

1

Proprio come OMZ commentato, sembra questo problema è stato risolto in iOS 5.1.1 da Apple. Quindi, ho deciso di aggiungerlo alla sezione del problema noto del registro delle modifiche per la mia app e la soluzione alternativa è suggerire agli utenti di eseguire l'aggiornamento a iOS 5.1.1.

4

Sulla base di quanto sopra, e con grande rispetto per l'ingegnere Apple che mi ha aiutato a WWDC, ecco la soluzione che non funziona solo attorno a questo bug, ma punta anche il popover al pulsante giusto.

if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) 
    { 
     [actionSheet showFromBarButtonItem:self.actionSheetBarButtonItem animated:YES]; 
    } 
    else 
    { 
     CGRect windowsRect = [self.navigationController.toolbar convertRect:self.actionSheetBarButtonItem.customView.frame toView:self.view.window]; 

     [actionSheet showFromRect:windowsRect inView:self.view.window animated:YES]; 
    } 
+0

Se non si tratta di un pulsante personalizzato, è necessario calcolare da navigationController.view dimensionare la posizione del rect in quanto non vi è customView. – Conor

Problemi correlati