1

私の知る限り、私は何か間違ったことをしているとは思いませんが、次のようになっています。

2011-04-02 14:55:23.350 AppName[42430:207] nested push animation can result in corrupted navigation bar
2011-04-02 14:55:23.352 AppName[42430:207] nested push animation can result in corrupted navigation bar
2011-04-02 14:55:23.729 AppName[42430:207] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2011-04-02 14:55:23.729 AppName[42430:207] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

これが私のコードです

- (IBAction) btnGetCurrentLocation{
    [SVProgressHUD showWithStatus:@"Getting current location..."];
    locationManager = [[CLLocationManager alloc] init];
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.delegate = self;
    [locationManager startUpdatingLocation];
    [SVProgressHUD dismiss];
}

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
           fromLocation:(CLLocation *)oldLocation {

    [locationManager stopUpdatingLocation];
    CLLocationCoordinate2D coordinate = newLocation.coordinate;

    LocationMapViewController *locationMapViewController = [[LocationMapViewController alloc] initWithNibName:@"LocationMapViewController_iPhone" bundle:nil];
    locationMapViewController.title=@"Your Title";
    locationMapViewController.centerOfMap = &(coordinate);
    [self.navigationController pushViewController:locationMapViewController animated:YES]; 

}

私はそれをグーグルで検索しましたが、ほとんどの場所でアニメーションの配置について話しています:いいえ、しかし、次の画面に地図が表示されません.

4

4 に答える 4

4

CLLocationManager が同じコントローラーからの場所の変更を通知するたびに、新しいコントローラーをプッシュしています。その結果、ネストされたナビゲーションが発生します。最初に通知されていることをそのコントローラーで LocationMapViewController への参照を保持し、後でそれをチェックして通知しようとしています:

if (self.locationController == null){
     LocationMapViewController *locationMapViewController = [[LocationMapViewController alloc] initWithNibName:@"LocationMapViewController_iPhone" bundle:nil];
    locationMapViewController.title=@"Your Title";
    locationMapViewController.centerOfMap = &(coordinate);
    [self.navigationController pushViewController:locationMapViewController animated:YES]; 
}else{
    [self.locationController locationDidChangeTo: &(coordinate)];
}

別の代替手段は、LocationMapViewController で CLLocationManager を作成することです...

于 2012-07-06T06:23:16.620 に答える
2

私が見つけた別の解決策は、すべてのコードをストーリーボードに変換できることであり、ワラ、再び機能します。甘い。見た目ほど難しくないよ、乾杯、トロンニック

于 2012-11-29T21:46:24.600 に答える
1

UIViewControllers同時に2つ以上のナビゲーションスタックにプッシュしていないことを確認してください。

于 2012-07-16T09:20:30.737 に答える
0

これがあなたの特定の問題に対処するかどうかは100%わかりませんがnested pop animation can result in corrupted navigation bar、表示される前にView Controllerをポップしようとしたときにメッセージが表示されました. viewDidAppearビューが表示されたことを示すフラグを UIViewController サブクラスに設定するようにオーバーライドします ([super viewDidAppear]同様に呼び出すことも忘れないでください)。コントローラーをポップする前に、そのフラグをテストしてください。ビューがまだ表示されていない場合は、ビュー コントローラが表示されたらすぐに 内からポップする必要があることを示す別のviewDidAppearフラグを設定することをお勧めします。そのようです:

@interface MyViewController : UIViewController {
    bool didAppear, needToPop;
}

...そして@implementation...

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    didAppear = YES;
    if (needToPop)
        [self.navigationController popViewControllerAnimated:YES];
}

- (void)myCrucialBackgroundTask {
    // this task was presumably initiated when view was created or loaded....
    ...
    if (myTaskFailed) {  // o noes!
        if (didAppear)
            [self.navigationController popViewControllerAnimated:YES];
        else
            needToPop = YES;
    }
}

重複popViewControllerAnimatedした呼び出しは少し醜いですが、現在疲れている状態でこれを機能させる唯一の方法です。

于 2013-10-14T23:40:15.593 に答える