ビュー コントローラーをセットアップする単体テストを作成しようとしています。ビューの初期化を取得する 2 つの方法を試しました。最初の方法は、バンドルを使用して nib コンテンツをロードし、探しているものを除外することです。次のように:
MyViewController *controller = nil;
....
NSArray* nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
NSObject* nibItem = nil;
while ( (nibItem = [nibEnumerator nextObject]) != nil) {
if ([nibItem isKindOfClass:[MyViewController class]]) {
controller = (MyViewController*) nibItem;
break;
} else {
NSLog(@"nibItem class is %@", [nibItem class]);
NSLog(@"nibItem is %@", nibItem);
}
}
これらのコードが終了した後、コントローラーはまだ nil です。いくつかのログを挿入して nib クラス (%@ プレースホルダー) を検査しましたが、MyViewController と同じであることがわかりました (少なくとも両方のクラスの説明はそうでした)。これらのコードがデバッグ/リリース ターゲットで非常にうまく機能することは確かですが、単体テストを実行している間は機能しません。
つまり、クラスの説明は同じですが、クラスが異なるということですか?
私が試した 2 番目の方法は、initWithNibNamed:owner:options メソッドを使用することです。単に xib ファイル名を指定するだけですが、Xcode は nib がロードされたがビュー アウトレットが設定されていないと応答します。正しくセットアップされていることを再確認してください。
- Interface Builderdr で、カスタム クラス名を指定します。
- テスト ターゲットのコピー ビルド リソース セクションのリストに xib ファイルを追加します。
- テーブルビュー アウトレットをインターフェイス ファイルにリンクします (ただし、ビュー アウトレットをクラスにドラッグすることはできませんが、クラス内の tableView に自動的にポイントされます)。
これまで、テスト パスを取得できる唯一の方法は、View Controller のビューとテーブル ビューを手動で設定することです。