2013-08-29 5 views
5

Das Erstellen von "IOS Project" in xcode 5 verursacht Folgendes beim Starten für den iPad-Simulator. Die Anwendung funktioniert für iPhones Konfiguration. Ich habe das Ziel auf 5 und später eingestellt und Auto-Layout entfernt, da es nicht kompatibel mit ios/xcode 5 ist.setPreferredContentSize-Fehler in der iOS-App

Ich bekomme den folgenden Fehler beim Start der iPad App.

2013-08-29 08:53:57.688 IOS Project[350:c07] -[MasterViewController setPreferredContentSize:]: unrecognized selector sent to instance 0x9e2cc20 
2013-08-29 08:53:57.692 IOS Project[350:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MasterViewController setPreferredContentSize:]: unrecognized selector sent to instance 0x9e2cc20' 
*** First throw call stack: 
(0x1cd012 0x14c4e7e 0x2584bd 0x1bcbbc 0x1bc94e 0xbe7b 0x624d36 0x85054a 0x8506c3 0x40871e 0x4089a2 0x407876 0x418cb5 0x419beb 0x40b698 0x1f5fdf9 0x1f5fad0 0x142bf5 0x142962 0x173bb6 0x172f44 0x172e1b 0x40717a 0x408ffc 0x6d3d 0x6ca5) 

Antwort

3

In iOS7, UIViewController hat eine neue Eigenschaft preferredContentSize. Ein Projekt gemacht für iOS7 hat die folgende Methode:

- (void)awakeFromNib 
{ 
    self.preferredContentSize = CGSizeMake(320.0, 480.0); 
    [super awakeFromNib]; 
} 

Es sendet daher eine setPreferredContentSize: Nachricht an Ihre Controller, egal, ob die Eigenschaft implementiert wird oder nicht. Um das Problem zu lösen, könnten Sie eine Eigenschaft vermeiden wollen Einstellung, die nicht existiert:

- (void)awakeFromNib 
{ 
    if ([[[UIDevice currentDevice] systemVersion] compare:@"7" options:NSNumericSearch] != NSOrderedAscending) { 
     self.preferredContentSize = CGSizeMake(320.0, 480.0); 
    } 
    [super awakeFromNib]; 
} 
17

obwohl die akzeptierte Antwort bei der Ermittlung der Ausgabe korrekt ist, würde ich nicht für eine bestimmte Geräteversion überprüfen und stattdessen etwas verwenden wie

if ([self respondsToSelector:@selector(setPreferredContentSize:)]) ... 
+0

Ihre Antwort hat mir sehr geholfen, ty. – JJ86

2

Wenn Sie Rückwärtskompatibilität in Sie app halten wollen, immer überprüfen Existenz der neu in neueren Version von iOS eingeführt Methoden. Wenn die Methode in älteren Versionen nicht existiert, darf sie nicht aufgerufen werden. Es gibt eine Methode respondsToSelector, durch die Sie die Existenz einer bestimmten Methode kennen können.
Also in Ihrem Fall, wenn Sie wollen für preferredContentSize überprüfen, Sie mögen, wie dies tun können:

if ([self respondsToSelector:@selector(preferredContentSize)]) { 
    self.preferredContentSize = CGSizeMake(320.0, 600.0); 
} 
Verwandte Themen