3

そのため、新しい OS ごとに、一連のメソッドが非推奨と宣言されています。私にとって奇妙なことは、iOS5 と iOS6 を引き続きサポートしたい場合は、 withUILabelminimumScaleFactoroverのように、廃止された方法と代替方法の両方を使用する必要があることminimumFontSizeです。

に置き換えるmyLabel.minimumFontSizemyLabel.minimumScaleFactor、iOS5 でアプリがクラッシュします。

そこで、ifwithを使用し-respondsToSelector:て OS が 5 か 6 かを調べ、それに応じてminimumScaleFactororを使用しますminimumFontSize

問題は、自分のコードに大量のifs とを書かなければならないかもしれないということです。respondsToSelectors

非推奨に対処するためのより良い方法はありますか?

4

5 に答える 5

6

どのiosでも使用できる関数を作成します:

void AbsSdk30_upg60_UILabel_setMinimumScaleFactor(UILabel * label, CGFloat minimumScaleFactor) {
    if ([label respondsToSelector: @selector(setMinimumScaleFactor:)]) {
        [label setMinimumScaleFactor: minimumScaleFactor];
    }
    else {
        const CGFloat curFontSize = label.font.pointSize;
        const CGFloat fontSize = (0.0 == curFontSize) ? [UIFont labelFontSize] : curFontSize;
        [label setMinimumFontSize: fontSize * minimumScaleFactor];
    }
}
于 2013-03-10T08:23:41.237 に答える
2

言語に依存しないソリューション:アプリの起動時にOSを取得し、グローバル変数を設定します。次に、必要に応じて、OSバージョンの変数を照会します。将来のバージョンで変更が発生した場合に簡単に拡張できるように、case/switchステートメントでこれを行うことができます。

擬似コード:

switch iOSversion
    case < 6
        dothis
        break
    case <7
        dothat
        break
    case >7
        OS not supported ;)

技術的にはIFの場合と同じですが、ソースはより短く、より構造化されており、OSのバージョンを毎回照会する必要はありませんが、アプリの起動時に1回だけ照会する必要があります。

于 2012-09-28T11:36:48.693 に答える
1

そのためには、展開ターゲットを最小限に設定する必要があります。そのため、アプリケーションを実行すると、非推奨のエラーが発生することはありません。また、コードに if と RespondsToSelectors を記述する必要もありません。展開ターゲットを ios 5.0 または 5.1 にすることができます。うまくいくと思います。また、展開ターゲット 6.0 が必要な場合は、非推奨の方法を置き換えることができる別の方法があります。

于 2012-09-28T11:38:27.087 に答える
1

私は「非推奨」を、メソッドが将来ある時点でなくなる可能性があるという警告として扱います。今すぐ置き換える必要があるというわけではありません。現在のビルドのコードを複雑にするのではなく、特定の古いバージョンのサポートを終了するときに何を変更するかについてコメントを残しておきます。

新しいリリースで動作しなくなるものを除いて、バージョンごとに #ifdef はしません。

于 2012-09-28T11:41:41.273 に答える