2010-12-26 6 views
0

私はCore Data機能の拡張に取り組んでいます。ユーザーのNSApplicationDelegateがテンプレートのmanagedObjectContextアクセサを実装しているかどうかをテストしたいコードブロックがあります。しかし、私はAppKitフレームワークやNSApplication(コマンドラインアプリケーションでこの機能を使うかもしれない)を必要としたくないので、ブロックを#ifdefで囲んでみたいと思います。Objective-Cで#importedファイルをテストする一般的な方法はありますか?

NSApplication.hを見ると、NSAppKitのバージョン(NSAppKitVersionNumber10_0)には#defineがあります。私はそれらの任意の1つをテストすることができますが、それはかなり正しいと感じません。プリプロセッサには、現在のコンパイル環境にフレームワークまたは特定のヘッダが含まれているかどうかをテストする一般的な方法がありますか?

答えて

1

のでいいえ、そこではありません:Cプリプロセッサは、それが含まれたファイルを追跡しません

  1. - それはちょうどそれらとプリプロセッサは、フレームワーク「の概念がありません
  2. の動きを含んでいますとにかくリンク段階に持ち込まれることさえありません。

AppKitバージョンのテストは、プリプロセッサでこの種のことを行う慣用的な方法です。

しかし、私はこのためにプリプロセッサが必要な理由がわかりません。

BOOL delegateImplementsAccessor = [[[NSClassFromString(@"NSApplication") sharedApplication] delegate] respondsToSelector:@selector(managedObjectContext)]; 
+0

NSClassFromStringを使用するようにお願いします。私はあなたの最初の主張によって混乱します。 '#import'はヘッダファイルの一回の実行を保証します。たとえプリコンパイルされたヘッダーが存在するかどうかをテストしていても、トラッキングが必要な場合があります。 –

+0

@Seamus:プリプロセッサは、インクルードされたファイルの内部リストを保持している可能性が高いですが、このリストへのインタフェースを提供する必要はありません。 – dreamlax

+0

右。そのデータへのインタフェースがあるかどうかは、私が後にしたものとほとんど同じです。 –

関連する問題