UIBarButtonItem.h を見るとUIBarButtonSystemItemPageCurl
、プリプロセッサを使用して条件付きで定義されていることがわかります。
typedef NS_ENUM(NSInteger, UIBarButtonSystemItem) {
⋮
#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
UIBarButtonSystemItemPageCurl,
#endif
};
…_MAX_ALLOWED
SDK バージョンに定義されています。定数が定義されると、その定数は常に存在します。
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 のバージョンを比較する必要があります。