0

私のアプリを簡単に説明させてください。ルート ビューのタブ バー コントローラー (5 つのタブ) があります。最初のビューはナビゲーション コントローラーです。そのiPadアプリ。今、私は CODE 経由でヘッダーを作成しているテーブルビューを持っています。

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
 { 
    _headerScenarioIDLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
   //and many more declarations here

}

それに応じてビューを回転させます

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{
    if (UIInterfaceOrientationIsLandscape(fromInterfaceOrientation))
    {// for portrait.
     _headerScenarioIDLabel.frame        = CGRectMake(-30, 2, 125, 20);
    }
   else
   { // for LandScape
          _headerScenarioIDLabel.frame        = CGRectMake(-26, 2, 125, 20);
    }
}

問題は、アプリケーションを起動して回転させるとこのコードが完全に機能することですが、ナビゲーションに入ってナビゲーションから戻ると、さらに回転するとアプリがクラッシュします。

スレッド 1 EXE の不正なアクセス、0x1bd109b: movl 8(%edx)、%edi

この奇妙なクラッシュのどこが間違っているかを誰かが提案できますか.. ???

4

1 に答える 1

0

リークがないか静的アナライザーでコードをチェックします。また、最初に目にするのは_headerScenarioIDLabel、自動解放されたオブジェクトで ivar を初期化していることです。ivar はヘッダー ビューへの強力なポインターを保持する必要があるため、これを修正する必要があります。また、メソッド-tableView:viewForHeaderInSection:が複数回呼び出される可能性があることにも注意してください。そのため、再度設定する前にこの ivar を解放する必要があります。これらすべての問題に対する簡単な解決策は、プロパティを使用することです...そして、特に手動のメモリ管理を使用する場合は常にプロパティを使用します。

于 2013-01-08T08:30:06.373 に答える