次のコードを含む XCTest ケースがあります。
#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>
@interface ChildViewControllerTests : XCTestCase
@end
@implementation ChildViewControllerTests
-(void) testInitAddsPassedControllersAsChildViews {
id mockTVC1 = [OCMockObject niceMockForClass:[UITableViewController class]];
id mockTVC2 = [OCMockObject niceMockForClass:[UITableViewController class]];
UIViewController *controller = [[UIViewController alloc] init];
[controller addChildViewController:mockTVC2]; // Fails if mockTVC2, but mockTVC1 works.
}
@end
それは私がそれを作ることができるのと同じくらい簡単です。このテストを実行すると、mockTVC2 の割り当てを解除する EXEC_BAD_ACCESS が表示されます。
代わりに、mockTVC1 をコントローラーに追加すると、問題なく動作します。
mockTVC1 宣言と mockTVC2 宣言の順序を入れ替えると、問題なく動作します。
mockTVC1 宣言と mockTVC2 宣言の順序を入れ替えて、mockTVC1 を追加するように変更すると、割り当て解除に再び失敗します。
したがって、私の要約は、宣言の順序に関係なく、2番目に宣言されたモックをコントローラーに追加しようとすると、割り当て解除時に失敗するため、問題は2番目のモックの宣言に関係しているということです。
カットアンドペーストを簡単に行って、これが発生するかどうかを確認できますか?
それが私の設定だけではないことを確認したいと思います。
ありがとう