11

iOS 6 および iOS 7 で使用する iPad アプリをコンパイルするのに苦労しています。

これが私が受け取り続けるメッセージです:

Property 'barTintColor' not found on object of type 'UITabBar *'; did you mean 'tintColor'?

Base SDKターゲットの は に設定され、Latest iOS (iOS 7.0)iOS Deployment TargetですiOS 6.0。私はプロジェクトでクリーンを行いました。

Xcode ターゲット設定

コードは次のとおりです。

.h ファイル内:

@property (nonatomic, strong) IBOutlet UITabBar *tabbedBar;

.m ファイル内:

if ([tabbedBar respondsToSelector: @selector(barTintColor)]) {
     tabbedBar.barTintColor = [UIColor blackColor];
}

私は iOS 7 SDK に対してコンパイルしているので、barTintColor について認識している必要があります。何が問題なのですか?

更新しました:

さて、私は進歩していますが、その理由をよく理解していません。

この Xcode のスクリーンショットを参照してください。アクティブなスキームの選択で、私の iPad 3 の 2 つのエントリに注意してください。違いはなんですか?一番上のオプションを選択すると、エラーが発生します。一番下のオプションを選択すると、機能します。

Xcode デバイスの選択

このリストに同じデバイスが 2 回表示される理由と、一方を選択してもう一方を選択しないと機能する理由を誰か説明できますか? 参考までに、デバイスには iOS 6 がインストールされています。

4

1 に答える 1

15

Xcode には、iOS 6 用と iOS 7 用の 2 つの SDK がインストールされています。これで、iOS 7 デバイスを接続すると、デバイス セレクターに 2 つのデバイス (つまり、オプション) として表示されます。最初の行は iPad 用です。 3 (iOS 6)、iPad 3 (iOS 7) の 2 番目。

あなたのエラーの問題は、iPad 3 (iOS 6) を選択すると、Xcode はまだデバイスを iOS 7 として読み取ります(とにかく、それがインストールされているものです) ため、ビルド時に[tabbedBar respondsToSelector: @selector(barTintColor)]コードを渡します (セレクターに応答し、' iOS 7 です) が、iOS 6 用にビルドしているため、同時にエラーが発生します。iOS 6 にはそのメソッドがありません! 楽しい。

基本的に、iOS 7 デバイスでテストする場合、iOS 6 オプションは使用できません。iOS 6 デバイスが必要か、古いバージョンをテストするためのシミュレーターに行き詰まっているかのどちらかです。

respondsToSelector:編集: useを使用する代わりに、次の方法で私が言っていることをテストできます。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) {
    // code
}

リストの最初のデバイス (iPad 3 iOS 6) を選択します。節を確認できますifが、Xcode は iOS 6 ではセレクターを使用できないというエラーを返します。

于 2013-09-25T20:26:29.953 に答える