2012-10-02 1 views
28

Dieser Fehler ist nicht sinnvoll, da die bevorzugte Orientierung UIInterfaceOrientationLandscapeRight unterstützt von der OrientierungpreferredInterfaceOrientationForPresentation muss zurückgeben eine unterstützte Schnittstelle Orientierung

//iOS6 

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

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

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

Fehler zurückgegeben:

beenden app aufgrund nicht abgefangene Ausnahme 'UIApplicationInvalidInterfaceOrientation', Grund: 'preferredInterfaceOrientationForPresentation muss eine unterstützte Schnittstellenausrichtung zurückgeben!'

Antwort

52

Der Code sollte wie folgt aussehen:

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

Stellen Sie außerdem sicher, dass in Ihrem Info.plist Sie haben die richtigen Orientierungen festgelegt für Sie app, weil, was Sie von supportedInterfaceOrientations zurückgeben wird mit der Info.plist gekreuzt und wenn es einen gemeinsamen nicht finden kann, dann werden Sie diesen Fehler bekommen.

+0

Ich finde dies, um mir Kummer zu verursachen! Ich habe eine universelle App ViewController-Code teilen und den obigen Code für Benutzer-Idiom testen. das ipad muss nur landschaft und das iphone porträt für alle bars sein, die landschaftslandschaft sein müssen. Ich kann das nicht bekommen, um die korrekten Orientierungen bei – user7865437

+3

zu liefern Beachten Sie, dass es der "Mask" Teil der "UIInterfaceOrientationMaskLandscape" ist, der der wichtige Teil dieser Antwort ist. Der ursprüngliche Plakatbenutzer hat die falsche Aufzählung in seiner Methode. Es scheint irgendwie albern, dass Apple eine neue Reihe von enum/options für diese Methode erstellt hat, die dazu führt, dass Leute diesen einfachen Fehler machen - zusätzlich bietet Xcode keine Compiler-Zeitprüfung, da die Methode NSUInteger zurückgibt. –

+1

@lms, Meine gesamte Anwendung sollte nur für den Hochformat-Modus unterstützt werden, mit Ausnahme einer Ansicht (die für Querformat unterstützt werden muss). In Plist habe ich nur die Ausrichtung für Portrait festgelegt und oben habe ich Code geschrieben, wo ich die Ausrichtung für Landscape ändern möchte. Aber es gibt entweder UIInterfaceOrientationLandscapeRight oder UIInterfaceOrientationLandscapeLeft. Aber ich möchte beide aus meiner Sicht. Kannst du mir sagen, wie ich es bekomme? –

8

Das sind die falschen enums für supportedInterfaceOrientations. Sie müssen UIInterfaceOrientationMaskLandscapeLeft verwenden, usw. (Notiz das Wort in der Mitte Maske)

14

supportedInterfaceOrientations nur genannt wird, wenn shouldAutorotate auf YES

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

Der einfachste Ansatz für mich festgelegt ist, ist nur die Info.plist

info.plist

einstellen Wenn Sie unterstützen möchten iOS 5 verwendet diesen Code in Ihren View-Controllern.

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

aus der Dokumentation:

-(NSUInteger)supportedInterfaceOrientations { 

    return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskLandscapeLeft; 
} 

Beachten Sie, dass die richtige Ausrichtung ist "Mask"! Haben Sie das versucht?