2

スクリーンショットキャプチャの自動化とテストの目的で、プロジェクトのすべてのUIViewControllerクラスを一覧表示したいと思います。
すべてのUIKitビューコントローラーのリストを取得したくはありません。プロジェクトで作成したものだけが必要です。

リストされたクラスのいくつかをインスタンス化する必要があるため、実行時にObjective-Cコードでこれを実行したいと思います。
たとえば、単体テストでは、すべてのUITableViewCellサブクラスが、関連付けられたxib内のアイテムの高さと同じ高さを返し、このオブジェクトがUIViewサブクラスではなくUITableViewCellサブクラスであることを表明するテストが必要になる場合があります。
他の使用目的は、プロジェクトのドキュメントにすべてのUIViewControllerクラスのスクリーンショットを追加することです。

このコードはお客様に発送されないことに注意してください。これは、開発者マシンでのテストとスクリプト作成でのみ使用されます。

pbxprojに含まれているファイルを解析できたと思いますが、それは間違っていると感じ、堅牢ではありません。
私のプロジェクトの単純なls *ViewController.hものも機能しますが、それについては同じ感覚です。
他のアイデアはありますか?

UITableViewCellsその後、他のクラスでこの方法を拡張して、たとえば、作成したすべて、またはすべてを取得できる場合はボーナスですUIViews

4

2 に答える 2

3

NSObject + Subclassesカテゴリを使用すると、のすべてのサブクラスを簡単に取得できますUIViewController

ビューコントローラのみを取得するには、次のようにフィルタリングします。

NSSet *myViewControllerClasses = [[UIViewController subclasses_xcd] filteredSetUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    return [[NSBundle bundleForClass:evaluatedObject] isEqual:[NSBundle mainBundle]];
}]];

myViewControllerClasses次に、オブジェクトを含むコンテンツで好きなことを行うことができClassます。

于 2013-03-09T13:17:21.837 に答える
1

ランタイムを使用すると、少し難しくなります。class_tand class_rw_t(クラス オブジェクトのデータ メンバー)の定義を使用して、サブクラス ツリーを効率的に調べることができます。

クラスをフィルタリングするには、クラス名 (プレフィックス) の先頭、またはプロジェクト用に作成されている場合はベース VC クラスを確認する必要がある場合があります。

この記事 を見る

于 2013-03-06T16:46:04.647 に答える