0

私の iPad アプリケーションには、さまざまなアイコンが表示されたメイン メニュー画面があります。

アイコンをタップすると、Custom UISplitViewController に移動します。私はこのコードでそれをしました。SplitView ではすべて正常に動作しています。

問題: MASTER Viewcontroller のナビゲーション バーのボタンをタップすると、メイン メニュー画面に戻るという問題に直面しています。

カスタム UIsplitview のコード:-

self.navigationController.navigationBarHidden = NO;
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

left = [[LeftViewController alloc] initWithStyle:UITableViewStylePlain];
UINavigationController *leftNav = [[UINavigationController alloc] initWithRootViewController:left];
right = [[RightViewController alloc] initWithNibName:@"RightViewController" bundle:nil];
UINavigationController *rightNav = [[UINavigationController alloc] initWithRootViewController:right];
left.right = right;

splitViewController = [[UISplitViewController alloc] init];    
splitViewController.viewControllers = [NSArray arrayWithObjects:leftNav,rightNav, nil];

splitViewController.delegate = right;

appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UISplitViewController *cvc = (UISplitViewController *) splitViewController;
[appDelegate.window setRootViewController:cvc];

編集: カスタム ボタン コード

UIButton *a1 = [UIButton buttonWithType:UIButtonTypeCustom];
[a1 setFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
[a1 addTarget:self action:@selector(menu:) forControlEvents:UIControlEventTouchUpInside];
[a1 setImage:[UIImage imageNamed:@"icon.png"] forState:UIControlStateNormal];
UIBarButtonItem *random = [[UIBarButtonItem alloc] initWithCustomView:a1];
left.navigationItem.leftBarButtonItem = random;

- (void)menu {

[self.view removeFromSuperview];
ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

[appDelegate.window setRootViewController:vc];
[vc release];

}

これにより、クラッシュが発生し、EXC_BAD_ACCESS メッセージが表示されます。

Plsは私を導きます..

4

2 に答える 2

0

これが良いデザインかどうかはわかりません。メインメニュー画面のベッドサイドから分割ビューコントローラーに移動して、他に何をしますか?

このデザインを維持したい場合は、投稿したコードの最後で行ったのと同じことを行います。ボタンのアクション メソッドで、メイン メニュー コントローラーのインスタンスを作成し、それをウィンドウのルート ビュー コントローラーとして設定します。

編集後:

確実にクラッシュを引き起こす問題が 1 つあります。ボタンを作成するとき、アクションは「menu:」に設定されていますが、メソッドの実装はコロンや引数のない単なる「menu」です。コロンを削除すると、すべてが機能するはずです。

これらの 3 行が問題を引き起こしているとは思いませんが、あなたがしていることをする必要はありません:

appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UISplitViewController *cvc = (UISplitViewController *) splitViewController;
[appDelegate.window setRootViewController:cvc];

すでにプロパティまたは ivar、splitViewController があり、cvc に再割り当てする必要はありません。また、アプリのデリゲートを取得する必要はありません。self.view.window でウィンドウを取得できます。したがって、これらの 3 行は次のように変更できます。

self.view.window.rootViewController = splitViewController;
于 2013-01-25T17:06:30.410 に答える
0

ブレークポイントからステップスルーすることで、コードのどの行でクラッシュが発生したかを確認できると思いますか?

UISplitViewController サブクラスを使用しないので、正直に言うと、私はあなたの sw デザインのファンではありません。UIViewController コンテインメント API を使用してカスタム SplitViewController を作成し、それを UINavigationController と組み合わせて使用​​する可能性が高くなります。

つまり、UISplitViewController サブクラスを使用する必要がある場合は、すべてのコードでメイン appDelegate のウィンドウから viewController を追加または削除し、通知を使用して、関連する viewController をいつ追加または削除するかを appDelegate に伝えることをお勧めします (根)。このようにして、同じView Controllerの複数のインスタンスが主要なメモリの問題にぶら下がっている可能性を減らします. viewController をその親から削除しようとするのは常に注意が必要であり、親または上位レベルのエンティティ (この場合はメイン アプリのデリゲート) によって管理するのが最適です。

于 2013-01-29T10:48:49.490 に答える