672 Stimmen

Versuch, einen UIViewController auf einem UIViewController zu präsentieren, dessen Ansicht sich nicht in der Fensterhierarchie befindet

Ich habe gerade begonnen, Xcode 4.5 zu verwenden, und ich habe diesen Fehler in der Konsole:

Warnung: Versuch, < finishViewController: 0x1e56e0a0 > auf < ViewController: 0x1ec3e000> zu präsentieren, dessen View nicht in der Windowshierarchie ist!

Die Ansicht wird immer noch angezeigt und alles in der App funktioniert einwandfrei. Ist das etwas Neues in iOS 6?

Dies ist der Code, den ich verwende, um zwischen den Ansichten zu wechseln:

UIStoryboard *storyboard = self.storyboard;
finishViewController *finished = 
[storyboard instantiateViewControllerWithIdentifier:@"finishViewController"];

[self presentViewController:finished animated:NO completion:NULL];

3voto

Vlad Punkte 3337

Wenn Sie ein AVPlayer-Objekt mit abgespieltem Video haben, müssen Sie das Video zuerst anhalten.

3voto

vijay Punkte 1547

Es funktioniert gut, versuchen Sie dies. Link

UIViewController *top = [UIApplication sharedApplication].keyWindow.rootViewController;
[top presentViewController:secondView animated:YES completion: nil];

3voto

HotFudgeSunday Punkte 1373

Falls es jemandem hilft: Mein Problem war extrem dumm. Es war natürlich meine Schuld. Eine Benachrichtigung hat eine Methode ausgelöst, die das Modal aufgerufen hat. Aber ich war nicht die Benachrichtigung richtig zu entfernen, so irgendwann, ich würde mehr als eine Benachrichtigung haben, so dass die modale würde mehrmals aufgerufen werden. Nachdem Sie das Modal einmal aufgerufen haben, ist der Viewcontroller, der es aufruft, natürlich nicht mehr in der View-Hierarchie, weshalb dieses Problem auftritt. Meine Situation verursacht ein Bündel von anderen Problem auch, wie Sie erwarten würden.

Zusammenfassend lässt sich also sagen, dass Sie, was immer Sie tun sicherstellen, dass das Modal nicht mehr als einmal aufgerufen wird .

3voto

resting Punkte 13967

Ich hatte das gleiche Problem. Ich musste einen Navigationscontroller einbetten und den Controller über ihn darstellen. Unten ist der Beispielcode.

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIImagePickerController *cameraView = [[UIImagePickerController alloc]init];
    [cameraView setSourceType:UIImagePickerControllerSourceTypeCamera];
    [cameraView setShowsCameraControls:NO];

    UIView *cameraOverlay = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 768, 1024)];
    UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"someImage"]];
    [imageView setFrame:CGRectMake(0, 0, 768, 1024)];
    [cameraOverlay addSubview:imageView];

    [cameraView setCameraOverlayView:imageView];

    [self.navigationController presentViewController:cameraView animated:NO completion:nil];
//    [self presentViewController:cameraView animated:NO completion:nil]; //this will cause view is not in the window hierarchy error

}

3voto

saltwat5r Punkte 1067

Diese Art von Warnung kann bedeuten, dass Sie versuchen, neue View Controller über Navigation Controller während diese Navigation Controller präsentiert derzeit eine weitere View Controller . Um das Problem zu beheben, müssen Sie die aktuell präsentierten View Controller und nach Fertigstellung die neue vorlegen. Eine weitere Ursache für die Warnung kann der Versuch sein, die View Controller auf einem anderen Gewinde als main .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X