2013-11-28 5 views
11

verwende, weiß ich, dass es noch viele andere Fragen dazu gibt, aber sie erklären mein Problem nicht vollständig.Warnung: Versuchen Sie zu präsentieren, deren Ansicht nicht in der Fensterhierarchie ist! Wenn ich den identifizierten Abschnitt

ich von meinen ersten View-Controller gehe SAGViewController an einem anderen SAGHomeScreenViewController über eine bestimmte Storyboard benutzerdefinierte segue, wenn die entsprechende Taste gedrückt wird:

-(IBAction)goNewGame{ 
    [self performSegueWithIdentifier:@"startHomeSegue" sender:self]; 
} 

Es funktioniert gut, aber ich habe immer noch die Warnung:

Warnung: Versuch, SAGHomeScreenViewController: 0xc43b800 auf SAGViewController: 0xbaaa9f0 zu präsentieren, deren Ansicht nicht in der Fensterhierarchie ist!

Wenn ich die performSegueWithIndentifer Kommentar aus, arbeitet die Segue noch, aber ich habe nicht die Warnung:

Warum? Beachten Sie, dass ich keinen Navigationscontroller habe.
Irgendein Rat hier würde geschätzt werden, der Übergang funktioniert noch, aber ich will keine Warnungen, die ich nicht verstehe!

+0

Wenn Sie nicht UINavigationController verwenden, sollten Sie modales Segment verwenden. Segue funktioniert, weil du einen Abschnitt im Storyboard von deinem uibutton-Objekt zum nextviewcontroller verdrahtet hast, wenn ich nicht falsch liege. – suhit

+0

Ich verwende den benutzerdefinierten Übergang, um die Zielansicht von rechts einzufügen. Ich erhalte immer noch die Warnung, wenn ich zu einem modalen Übergang wechsle – AndyOS

+0

Wie fügst du dein gegenwärtiges viewControllert (der Controller, wo du goNewGame nennst) zur Ansichtshierarchie hinzu? – Greg

Antwort

8

Sie sollten diese Methode entfernen und Sie sollten die Verbindung in Ihrem Storyboard von der Schaltfläche zum zweiten ViewController herstellen.

// EXTENDED

Wenn Sie etwas zu Ihrem Ziel Ansicht übergeben möchten Sie prepareForSegue verwenden: Absender-Methode. Diese Methode wird jedes Mal, wenn Sie die Ansicht ändern, über segue genannt:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"YOURSEGUEIDENTIFIER"]) 
    { 
     YourViewController *yourVC = [segue destinationViewController]; 
    } 
} 

// EXTENDED

Dies geschieht, weil Sie Ihre segue auf zwei Arten angeschlossen haben eine in Code ist und ein anderer ist in Storyboard. Sie müssen einen von denen entfernen. Sie können Ihre IBAction aus Ihrem Code entfernen (so dass Sie nur eine Verbindung im Storyboard haben) oder Sie können Ihre Verbindung im Storyboard (von Ihrem Button zum Zielansicht-Controller) entfernen und erneut hinzufügen, aber dieses Mal ziehen Sie sie aus Ihrem Quellansicht-Controller (nicht auf den Ziel-View-Controller. Vergessen Sie nicht die Einrichtung der Überleitungskennung. Wenn Sie Storyboard verwenden, würde ich Ihnen empfehlen, Ihre IBAction aus dem Code zu entfernen, weniger Code zu verwalten. Hoffe diese Hilfe.

+1

Vielen Dank für Ihre Zeit. Was ist, wenn ich die performSegueWithIdentifier-Methode verwenden muss, obwohl z. etwas an die Zielansicht übergeben? Ich weiß, dass es noch andere Möglichkeiten gibt, Informationen weiterzuleiten, aber warum führt perseEWithIdentifier eine Warnung aus? – AndyOS

+0

Siehe oben bearbeiteten Post. – Greg

+0

Ich habe preparedForSegue sowieso, immer noch die Warnung, wenn ich die performSegueWIthIdentifier – AndyOS