0

ARC機能の使用

record_audio_testViewController *view2 = [[record_audio_testViewController alloc] initWithNibName:@"record_audio_testViewController" bundle:nil];

    [self.view addSubview:view2.view];

上記のコードを使用すると、ページはview2ページに移動しますが、どのボタンにもアクセスできません..view2でボタンを押しましたエラーが発生しました

Exe_Bad_Access (コード=1 アドレス=012902)

メモリを適切に解放する方法????

しかし、使用して

[self.navigationController pushViewController:view2 animated:YES];

このpopviewControllerとpushViewControllerが機能していません..(VIEW2ページをナビゲートできません)

理由わかる人いますか????

4

3 に答える 3

2

問題は、View Controller を作成しているが、それを使用しておらず、そのビューのみを使用していることです (ただし、ARC がスコープ外になったときに、View Controller 自体を解放させます)。ビュー コントローラ間を遷移するときは、pushViewController (ナビゲーション コントローラを使用している場合) または presentModalViewController (次のビューをモーダルで表示する場合。iOS 5 では presentViewController を使用) を使用する必要があります。コンテナー ビュー コントローラーを使用している場合は、transitionFromViewController を使用して子ビュー コントローラー間を遷移させることもできます。View Controller プログラミング ガイドを参照してください。ビュー コントローラ間の移行方法については、ガイダンスを参照してください。しかし、WWDC 2011 セッション 102 で、Apple は、View Controller の階層が適切に構造化されていることを確認する必要があることを明確にアドバイスしています (通常、ビュー階層をミラーリングします)。ビューを追加するだけではなく、View Controller 階層を無視してください。

とにかく、ビュー間を遷移するための標準的な手法は、ナビゲーション コントローラーを使用することです (これにより、「戻る」ボタンのあるタイトル バーが表示されます。表示したくない場合は非表示にすることができます)。

record_audio_testViewController *view2 = [[record_audio_testViewController alloc] initWithNibName:@"record_audio_testViewController" bundle:nil];

[self.navigationController pushViewController:view2 animated:YES];

// if non-ARC project, uncomment the following line
// [view2 release];

最後に、新しいコントローラーのビューを現在のビューコントローラーのビューのサブビューとして追加する手法を本当に使用したい場合 (これは良い考えとは思えません)、ARC がそうでないことを確認するだけです。範囲外になったら解除。そのため、新しいView Controllerを現在のメソッドのローカルvarではなく、現在のView Controllerのivarにすることで範囲外にしないでください。これで ARC の問題は解決しますが、おそらくビュー コントローラー間で適切な移行を行う必要があるため、良い手法とは思えませんが、完全な開示のために提示します。

于 2012-06-04T15:57:45.213 に答える
1

.h で、record_audio_testViewController *view2 のプロパティを設定します。強いか弱いかのどちらかです。(たぶん強い)

また、xib でファイル所有者クラスを record_audio_testViewController に設定していることを確認してください。

于 2012-07-15T14:48:14.933 に答える
0
record_audio_testViewController *view2 = [[[record_audio_testViewController alloc] initWithNibName:@"record_audio_testViewController" bundle:nil]autorelease]; 
[self.view addSubview:view2];
于 2012-06-04T13:46:21.237 に答える