2016-03-22 14 views
1

In meinem aktuellen XCode-Projekt habe ich zwei View-Controller. Der erste, der erste View-Controller, hat nur eine Schaltfläche. Der zweite Ansichtscontroller ist eine Unterklasse von UITableViewController. Ich definierte eine benutzerdefinierte Tabellenansichtszelle im Storyboard, gab ihr eine Wiederverwendungskennung und definierte eine benutzerdefinierte Klasse und verknüpfte die relevanten IBOutlets.UITableViewCell Storyboard-Registrierung abhängig vom Initial View Controller?

Nach dem Start der App, wenn die Taste gedrückt wird, wird die zweite Ansicht Controller über die erste über self.presentViewController(secondViewController, animated: true, completion: nil) modal präsentiert. Die beiden View-Controller sind nicht im Storyboard durch ein Segment verbunden. Nach dieser modal segue, während des Baus des Tisches, stürzt es mit dem Fehler:

'unable to dequeue a cell with identifier PlaylistCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

Wenn jedoch die Tabelle View-Controller die anfängliche View-Controller ist, ist es nicht zum Absturz bringen und zeigt alle Daten korrekt. Ich frage mich, ob die Nib-Registrierung davon abhängig ist, dass der View-Controller über das Storyboard mit dem ursprünglichen View-Controller verbunden ist.

EDIT: Ich habe meinen Fehler herausgefunden. Für andere Menschen, die sich in diesem Problem zu finden, wurde initialisiert ich meine zweite View-Controller wie:

let vc = SecondViewController()

Aber Sie haben es so intialize, wenn Sie es über Storyboard Design:

let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("SecondViewController")

Antwort

0

Wie Sie herausgefunden haben, müssen Sie den Tabellenansicht-Controller instanziieren, indem Sie ihn im Storyboard identifizieren.

Wenn das Storyboard für die zweite Controller die gleiche wie für die erste ist, können Sie dies auch tun:

if let storyboard = self.storyboard, controller = storyboard.instantiateViewControllerWithIdentifier("Second") as? UITableViewController { 
    self.presentViewController(controller, animated: true, completion: nil) 
} 

Auf diese Weise müssen Sie den Namen des Storyboards nicht hart codieren und Sie können Stellen Sie sicher, Storyboard und View-Controller sind nicht Null und können dargestellt werden.

Verwandte Themen