2013-08-29 14 views
5

xcode 5で「IOSプロジェクト」を作成すると、iPadシミュレータを起動するときに次のようになります。このアプリケーションはiPhoneの設定で動作します。ターゲットを5以上に設定し、iOS/xcode 5と互換性がないため、autolayoutを削除しました。iOSアプリケーションでsetPreferredContentSizeエラーが発生する

iPadアプリの起動時に次のエラーが発生します。 iOS7で

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) 

答えて

3

UIViewControllerは新しいプロパティpreferredContentSizeを持っています。

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

それ故、独自のコントローラ、プロパティが実装されているかどうかにかかわらずにsetPreferredContentSize:メッセージを送信します。iOS7のために作られたプロジェクトには、次のような方法があります。問題を解決するには、あなたが存在しないプロパティを設定しないようにしたい場合があります:

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

受け入れ答えは、問題を特定するのが正しいですが、私は特定のデバイスのバージョンを確認し、代わりに何かを使用していないだろうlike

+0

あなたの答えは、TY、私をたくさん助けました。 – JJ86

2

あなたのアプリケーションで下位互換性を維持したい場合は、常に新しいバージョンのiOSで新しく導入されたメソッドの存在を確認してください。メソッドが古いバージョンに存在しない場合は、呼び出されてはいけません。 特定のメソッドの存在を知る方法respondsToSelectorがあります。
は、だからあなたの場合、あなたはこのようなように行うことができ、preferredContentSizeをチェックしたい場合:

if ([self respondsToSelector:@selector(preferredContentSize)]) { 
    self.preferredContentSize = CGSizeMake(320.0, 600.0); 
} 
関連する問題