Tuesday, February 28, 2012

NSXMLParserDelegate を iOS4.0 で切り替える

NSXMLParser のプロトコル NSXMLParserDelegate は、iOS4.0 からの実装になるため、それ以前のSDKではプロトコルが定義されていないためコンパイルエラーとなります。

プリプロセッサを用いてSDKのバージョン判定を行うことで、プロトコル指定を切り替えることができます。

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 40000 
@interface XMLDataSource: NSObject <NSXMLParserDelegate>
#else
@interface XMLDataSource: NSObject
#endif
{
    ....
}

バージョン値を判定している 40000 について、iOS4.0以降では __IPHONE_4_0 という定数が定義されています。しかし、それ以前のSDKでは定義されていませんので、コンパイル時に未定義として 0 として扱われてしまい、意図した条件判定がされません。このためリテラルで指定する必要があります。