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 として扱われてしまい、意図した条件判定がされません。このためリテラルで指定する必要があります。