So laden Sie eine XIB mit einer top-level-ViewController?

Habe ich eine Feder mit einem view-controller root-element wie diesem:

So laden Sie eine XIB mit einer top-level-ViewController?

so kann ich die position der Elemente relativ zu den oberen und unteren layout-Führungen mit auto-layout.

Wenn ich das erste mal versucht zu laden, diese Feder mit

SearchViewControllerPro* searchViewController = [[SearchViewControllerPro alloc]initWithNibName:@"SearchViewControllerPro" bundle:[NSBundle mainBundle]];

Habe ich die folgenden run-time exception:

Terminating app due to uncaught exception
'NSInternalInconsistencyException', reason: '-[UIViewController
_loadViewFromNibNamed:bundle:] geladen "SearchViewControllerPro" Spitze, aber die Aussicht Steckdose war nicht gesetzt.'

Googlen der Fehler war es mich darauf hingewiesen, dass der Besitzer der Datei der xib benötigt, um eingestellt werden zu der Klasse von meiner view-controller und die view-Steckdose gesetzt werden musste, um das view-Objekt in der xib. Wenn ich so, dann erhalte ich folgenden Laufzeitfehler:

Terminating app due to uncaught exception
'UIViewControllerHierarchyInconsistency', reason: 'Ein Blick nur
verbunden höchstens mit einem view-controller gleichzeitig! Ansicht > zugeordnet ist . Klar, dieser Verein vor die Beteiligung dieser Ansicht mit
.'

Nicht kommen als eine überraschung, da die Ansicht verbunden ist, sowohl für den Eigentümer der Datei und die top-level-view-controller der Spitze. Aber wie kann ich sagen, der Lauf-Zeit, dass Sie beide in der Tat das gleiche, statt zwei getrennte Einheiten?

Edit:
Wenn ich versuche, unpck der ViewController aus der Feder so

NSArray* xibContents = [[NSBundle mainBundle] loadNibNamed:@"SearchViewControllerPro" owner:nil options:nil];
SearchViewControllerPro* mapSearchViewController = [xibContents lastObject];

kann es nicht gut:

Terminating app due to uncaught exception 'NSUnknownKeyException',
Grund: '[ setValue:forUndefinedKey:]: diese Klasse
ist nicht die key-value-coding-konform für die key-view.

Temporäre Lösung:

Ich habe eine Lösung gefunden, aber es ist nicht schön. Trotz der Struktur, wie gezeigt in IB, der view-controller wird nicht das Letzte Objekt in der xib. Also ich habe:

__block SearchViewControllerPro* mapSearchViewController = nil;
[xibContents enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if ([obj isKindOfClass:[SearchViewControllerPro class]]) {
        mapSearchViewController = obj;
    }
}];

und diese scheint zu funktionieren ohne Laufzeit abstürzt. Allerdings ist er alles andere als sauberer code.

  • In Bezug auf Ihre Bearbeitung.. Sie haben Fehler in Ihrer Miene. Sie müssen sicherstellen, dass Klassen-und Dateinamen korrekt sind, und Sie müssen manuell entfernen Sie alle fehlerhaften verbindungen, die Sie gemacht. Was haben Sie als die Klasse der FilesOwner? Welche verbindungen haben Sie zu FilesOwner?
  • Ok es ist egal, was Sie setzen in der Klasse von FilesOwner so lange, wie Sie erkennen, es wird sich ändern, je nachdem, ob Sie [NSBundle mainBundle] loadNibNamed:... oder SearchViewControllerPro alloc]initWithNibName:... also alle verbindungen, die Sie vorgenommen haben, FilesOwner ungültig (Sie stürzt ab), wenn Sie sich ändern, loading-Methode
InformationsquelleAutor Chris | 2013-09-25
Schreibe einen Kommentar