web-dev-qa-db-fra.com

PreferredInterfaceOrientationForPresentation doit renvoyer une orientation d'interface prise en charge

Cette erreur n'a pas de sens, car l'orientation préférée UIInterfaceOrientationLandscapeRight est renvoyée par l'orientation prise en charge

//iOS6

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationLandscapeRight | UIInterfaceOrientationLandscapeLeft);
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight;
}

Erreur :

Arrêt de l'application en raison d'une exception non interceptée 'UIApplicationInvalidInterfaceOrientation', raison: 'PreferredInterfaceOrientationForPresentation doit renvoyer une orientation d'interface prise en charge!'

30
Peter Lapisu

Votre code devrait ressembler à ceci:

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight;
}

Assurez-vous également dans votre Info.plist vous avez défini les bonnes orientations pour votre application car ce que vous retournez de supportedInterfaceOrientations est intersecté avec le Info.plist et s'il ne peut pas en trouver un commun, vous obtiendrez cette erreur.

57
lms

supportedInterfaceOrientations est uniquement appelé, si shouldAutorotate est défini sur YES

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight;
}

L'approche la plus simple pour moi consiste uniquement à définir Info.plist

info.plist

Si vous souhaitez prendre en charge iOS 5, utilisez ce code dans vos contrôleurs de vue.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
13
coco

Ce sont les mauvaises énumérations pour supportedInterfaceOrientations. Vous devez utiliser UIInterfaceOrientationMaskLandscapeLeft, etc (notez le masque Word au milieu)

9
borrrden

de la documentation:

-(NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskLandscapeLeft; 
}

Notez que l'orientation correcte est "Masque"! Avez-vous essayé cela?

1
Panayotis