0

私は UINavigationController を使用しています: 私の最初のビューには、このコードを使用して別のビューをプッシュする UIButton があります

- (IBAction)gototrack:(id)sender {
    map *map2 = [[map alloc] initWithNibName:@"map" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:map2 animated:YES];
    [map2 release];
}

この 2 番目のビューには、オブジェクトの位置を示すマップがあります。このオブジェクトは高速で移動しているため、毎秒位置を更新する必要があります。これは、新しい座標を計算してマップを更新するメソッドを呼び出す NSTimer を使用して実行しています。OK、すべて正常に動作しますが、ユーザーが (NavigationBar の通常のボタンを使用して) ビューをポップすると、NSTimer がまだ機能しているため、この 2 番目のビューを解放できませんでした!

ユーザーがこの 2 番目のビューをポップしたときに NSTimer を無効にして解放するにはどうすればよいですか? 自動的に呼び出されるメソッドはありますか? (やってみたけど何もない)

ありがとう!

4

2 に答える 2

1

またはの無効化を試すことができNSTimerます。-viewWillDisappearviewDidDisappear

viewWillDisappear:

このメソッドは、ビューがウィンドウから削除された、または別のビューで覆われていることに応答して呼び出されます。このメソッドは、ビューが実際に削除またはカバーされる前、およびアニメーションが構成される前に呼び出されます。

サブクラスはこのメソッドをオーバーライドし、それを使用して編集の変更をコミットしたり、ビューのファーストレスポンダ ステータスを辞任したり、その他の関連タスクを実行したりできます。たとえば、このメソッドを使用して、ビューが最初に表示されたときに viewDidDisappear: メソッドで行われたステータス バーの方向またはスタイルへの変更を元に戻すことができます。このメソッドをオーバーライドする場合は、実装のある時点で super を呼び出す必要があります。

詳細については、UIViewController リファレンスをご覧ください。

于 2011-07-13T15:51:19.313 に答える
0

簡単です。次のようになります。

于 2011-07-13T15:59:42.993 に答える