現在UITraitCollectionを使ってiPhoneとiPadを区別しようとしているのですが、イマイチUITraitCollectionの使い方がわかりません。
まず以下のようにコードを書いてデバイスの回転時にRegularかCompactかを検知してそれに沿った処理を記述するようにしました。

- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    if (newCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) {
        NSLog(@"Regular");

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        ViewController *VC = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
        UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:VC];
        [self.splitViewController showDetailViewController:navVC sender:self];

    } else {
        NSLog(@"Compact");

    }
    [super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator];
}

しかし上記のコードだとiPhone 6plusを縦画面から横画面にした時にアプリが落ちます。無限ループのような形で落ちます。なぜアプリが落ちてしまうのでしょうか?
また、showDetailViewControllerに関するロジックを除けてログだけを取るようにすると、なぜか画面を一回転させただけでも、「Compact Regular Compact」というようにログに表示されます。
そして、viewDidLoadで下記のコードをiPadで実行すると、「Regular Compact」とログが表示されます。

if ([self.traitCollection containsTraitsInCollection: [UITraitCollection traitCollectionWithHorizontalSizeClass: UIUserInterfaceSizeClassRegular]]) {
    NSLog(@"Regular");

} else {
    NSLog(@"Compact") 
}

なぜ二回も呼ばれているのか調べると、willTransitionToTraitCollectionが呼ばれていたようです。画面が回転してないにもかかわらず。
このように、全くUITraitCollectionを使用してiPhoneとiPadを区別することができてません。
なぜ上記のような複数回メソッドが呼ばれたり、アプリが無限ループになって落ちたりする挙動になってしまっているのでしょうか?
色々と調べてみてもUITraitCollectionの具体的な使い方に関する記事が少なく、これ以上どうすればいいかわかりません。
どなたかわかる方がいれば教えていただきたいです。宜しくお願いします。