0

特定のデバイスに存在するかどうかを確認しようとしてUIBarButtonSystemItemPageCurlいます。

注: UIBarButtonSystemItemPageCurliOS 4.0 以降に存在します。iOS 3.1.3 もターゲットにしています。ターゲット iOS 3 の部分について心配する必要はありません。

現在試した: if (UIBarButtonSystemItemPageCurl != NULL)

if ((UIBarButtonSystemItemPageCurl) == TRUE)

定数の存在を確認します (定数UIBarButtonSystemItemPageCurlと見なされますか? の値ですtypedef enum UIBarButtonSystemIcon)。これら 2 つの方法は現在機能していません。誰かが構造体 (含まれている構造体ではない) 内の値の存在を確認するためのガイダンスを提供できますか? ありがとう。

4

1 に答える 1

2

UIBarButtonItem.h を見るとUIBarButtonSystemItemPageCurl、プリプロセッサを使用して条件付きで定義されていることがわかります。

typedef NS_ENUM(NSInteger, UIBarButtonSystemItem) {
    ⋮
#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
    UIBarButtonSystemItemPageCurl,
#endif
};

…_MAX_ALLOWEDSDK バージョンに定義されています。定数が定義されると、その定数は常に存在します。

NULLこれはポインターではないため、比較しても意味がありません。それをゼロと効果的に比較しています。これは列挙の最初のものではないため、ゼロではないため、決してありませんNULL

それ整数です。UIBarButtonSystemItemPageCurlは と同義であり、OS のバージョンに関係なく23、番号は常に存在します。23

したがって、質問は「UIBarButtonSystemItemPageCurl(別名23)UIKit が認識できるものですか?」になります。</p>

それを見つける 1 つの方法は、それを に渡してinitWithBarButtonSystemItem:target:action:、何が起こるかを確認することです。うまくいけば、例外が返されるかnil、スローされます。いずれにせよ、iOS 3 デバイスで必要なことをすべて実行することで、それを検出して回復することができます。

もう 1 つの方法は、デバイスにそれsystemVersion@"4.0"を要求し、バージョン番号を理解できる方法で比較することです。Growl プロジェクトには、バージョン番号の文字列を解析して比較するためのコードがあります。これは OS X 用に書かれていますが、iOS ではほとんどまたはまったく変更を加えることなく動作するはずです。

私は最初に試行錯誤のアプローチを行います。黙って失敗する場合 (つまり、iOS 3 でも常に UIBarButtonItem を返し、3 で取得した項目が機能しない場合) にのみ、OS のバージョンを比較する必要があります。

于 2013-02-18T04:58:35.640 に答える