IOS プログラミングを学んだばかりで、初めての iPhone アプリを書いています。
私のアプリは、UINavigationController のルート ビュー コントローラーであるビュー コントローラーの MKMapView に関する情報を提供します。モバイル信号が悪い場合、私は mapViewDidFailLoadingMap:withError: を使用して、ユーザーが何をしているかに応じて、アプリが 2 つの異なるビュー コントローラーのいずれかをナビゲーション コントローラー スタックにプッシュするようにします。コードは次のとおりです。
- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error
{
NSLog(@"mapViewDidFailLoadingMap: %@", [error localizedDescription]);
[aiView stopAnimating];
if (mapTypeInt == 0) {
NSString *message =
[NSString stringWithFormat:@"Your signal is not currently
strong enough to download a map. Switching to table view."];
UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Maps Unavailable"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[av show];
if (currentMode == @"retracingSteps")
{
RetraceViewController *rvc =
[[RetraceViewController alloc] initWithNibName:@"RetraceViewController" bundle:nil];
[[self navigationController] pushViewController:rvc animated:YES];
}
else{
TripTableViewController *ttvc = [[TripTableViewController alloc] init];
[[self navigationController] pushViewController:ttvc animated:YES];
}
}
else{
[self setMapType:0];
NSString *message = [NSString stringWithFormat:
@"Your signal is not currently strong enough to download a satellite map.
Switching to Standard Map view."];
UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Can't Use Satellite Maps"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[av show];
}
}
昨日、田舎の谷間で弱いモバイル信号をテストしたところ、正しい 2 つ目のビュー コントローラーがスタックにプッシュされました。その後、電話をロックして数分後にアプリを再チェックしたときに気付いたのは、起床時にルート ビュー コントローラーがすぐに表示され、その後に期待どおりのビュー コントローラーが表示されたことです。事実上、これが行ったことは、2 番目のビュー コントローラーの同一のコピーをスタックにプッシュすることでした。これは、ルート ビュー コントローラーに戻るために [戻る] ボタンを 6 回タップする必要があったときに発見しました。
ウェイクアップ時にアプリに実行してもらいたいのは、ルート ビュー コントローラーではなく、電話がロックされたときにライブだったビュー コントローラーをすぐに表示することです。これを行う方法がわかりません。