2015-04-09 3 views
10

Recentemente ho iniziare a ricevere segnalazioni di crash per UIAlertView solo dagli utenti che utilizzano iOS 8.3scontri UIAlertView in iOS 8.3

Crashlytics riporta:

irreversibile: orientamenti UIApplicationInvalidInterfaceOrientation supportati non ha orientamento comune con l'applicazione e [_UIAlertShimPresentingViewController shouldAutorotate] sta restituendo SI

La riga in cui si verifica l'arresto anomalo è [show Mostra avviso]:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title 
                message:message 
                delegate:nil 
              cancelButtonTitle:cancelButtonTitle 
              otherButtonTitles:nil]; 
[alertView show]; 

che il codice è nell'app per un lungo periodo e ora si avvia in modo anomalo. Qualcuno ha avuto un comportamento simile e ha risolto il problema?

+1

sua deprecate in iOS 8. –

+2

so - ma le cose deprecato dovrebbe essere ancora lavorando e ha funzionato bene in ios 8.0, 8.1 e 8.2. Poiché la mia app supporta anche iOS 7 e non voglio introdurre condizionali per le chiamate UIAlertView ho deciso di mantenere il vecchio codice finché il suo supporto –

+0

viene visualizzato con lo stesso errore con UIAlertControllers. Sottoclasse UIAlertController (o UIAlertView) dovrebbe risolvere il problema. – Maxwell

risposta

9

tentativo implementando questo controllo

- (BOOL)shouldAutorotate { 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

questo anche: Orientation issue in Lanscape mode while opening camera in iOS 7 in iPhone

+0

Pensavo di averlo inserito, ma ho accidentalmente usato UIDeviceOrientationPortrait invece di UIInterfaceOrientationMaskPortrait. –

+0

quindi è risolvere il tuo problema giusto? – Bhoomi

+0

Aggiunto metodo sopra, ma ancora problema con la mia app – Abhishek

1

Meglio di questo si dovrebbe iniziare a utilizzare UIAlertController. Ha funzionalità molto migliori e anche per UIAlertAction non è necessario includere metodi delegati.

UIAlertController * alert= [UIAlertController 
          alertControllerWithTitle:@"Info" 
          message:@"You are using UIAlertController" 
          preferredStyle:UIAlertControllerStyleAlert]; 

UIAlertAction* ok = [UIAlertAction 
        actionWithTitle:@"OK" 
        style:UIAlertActionStyleDefault 
        handler:^(UIAlertAction * action) 
        { 
         [alert dismissViewControllerAnimated:YES completion:nil]; 

        }]; 

UIAlertAction* cancel = [UIAlertAction 
         actionWithTitle:@"Cancel" 
         style:UIAlertActionStyleDefault 
         handler:^(UIAlertAction * action) 
         { 
          [alert dismissViewControllerAnimated:YES completion:nil]; 

         }]; 

[alert addAction:ok]; 

[alert addAction:cancel]; 

[self presentViewController:alert animated:YES completion:nil]; 
9

La cosa più importante è:

UIApplicationInvalidInterfaceOrientation supportati orientamenti ha alcun orientamento comune con l'applicazione

significa che hai un posto implementato

- (NSUInteger)supportedInterfaceOrientations { 

    return UIDeviceOrientationPortrait; // or UIInterfaceOrientationPortrait 
} 

UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait =

In tale funzione deve essere restituito Maschera come:

UIInterfaceOrientation Maschera Ritratto che è

0

Dopo aver provato le soluzioni qui, nessuno di loro ha funzionato per me.Sto supportando iOS 6-8 in un'app e, più di questo, uso alcune librerie che utilizzano UIAlertView internamente, in modo semplice compilazione condizionale per utilizzare UIAlertController quando disponibile non era un'opzione.

Mi è venuta una soluzione che ha risolto il problema per me. Il tuo chilometraggio può variare. Includo il file di intestazione nel file Prefisso intestazione in modo che sia sicuro di essere incluso ovunque venga mostrato un UIAlertView.

Sto postando questo qui per chiunque stia inciampando su questo problema e le soluzioni trovate in rete non funzionano. Speriamo sia utile.

https://gist.github.com/joshhudnall/cdc89b61d0a545c85d1d