1

10.5SDKに対してビルドするアプリケーションがあります。10.7システムで実行しているときでも、正しく動作するようにしたいと思います。コードスニペット

if ([window respondsToSelector:@selector(setRestorable:)])
{
  [window setRestorable:NO];
}

ただし、コンパイラの警告がトリガーされます

'NSWindow' may not respond to '-setRestorable:'

setRestorableセレクターが10.7SDKで導入されたためです。これを修正する適切な方法は何でしょうか?

4

3 に答える 3

2

一部のヘッダーでダミーの (使用されていない) プロトコルを作成し、それを使用するソースにインポートされていることを確認してください。

@protocol Compatibility
- (void)setRestorable:(BOOL)flag;
@end

これにより、クラスが(ヘッダーで明示的に指定されていない場合でも)プロトコルを実装する可能性があり、不平を言うのをやめる必要があることをコンパイラーに納得させるはずです。

于 2012-05-21T15:46:10.093 に答える
0

私が見つけた1つの可能性はこれでした:

if ([window respondsToSelector:@selector(setRestorable:)])
{
  IMP setRestorableFunc =
    [window methodForSelector:@selector(setRestorable:)];

  setRestorableFunc(window, @selector(setRestorable:), NO);
}

ただし、これが最適なオプションかどうかはわかりません。

于 2012-05-21T15:59:50.887 に答える
0

単純に次のようにキャストしidます。

if ([window respondsToSelector:@selector(setRestorable:)])
{
  [(id)window setRestorable:NO];
}
于 2012-06-04T21:13:24.267 に答える