Ich habe eine Feder mit einem View-Controller-Wurzelelement wie folgt erhält:Wie lade ich ein XIB mit einem ViewController auf oberster Ebene?
so kann ich Elemente relativ zu der oberen und unteren Layoutführungsposition Auto-Layout.
Als ich versuchte, diese Feder ersten
SearchViewControllerPro* searchViewController = [[SearchViewControllerPro alloc]initWithNibName:@"SearchViewControllerPro" bundle:[NSBundle mainBundle]];
I Ausnahme bekam die folgende Laufzeit mit zu laden:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "SearchViewControllerPro" nib but the view outlet was not set.'
googeln dem Fehler wurde mich darauf hingewiesen, dass die Eigentümer-Datei der Xib musste auf die Klasse meines View-Controllers eingestellt werden und der View-Outlet musste auf das View-Objekt in der Xib gesetzt werden. Wenn ich dies tue, dann erhalte ich die folgenden Laufzeitfehler:
Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'A view can only be associated with at most one view controller at a time! View > is associated with . Clear this association before associating this view with .'
nicht als Überraschung Kommt da der Blick auf assoziiert ist sowohl den Dateieigentümer und der Top-Level-View-Controller der Spitze. Aber wie kann ich die Laufzeit feststellen, dass beide tatsächlich dasselbe sind anstatt zwei separate Entitäten?
Edit: Wenn ich versuche, wie so die Viewcontroller von der Spitze zu unpck,
NSArray* xibContents = [[NSBundle mainBundle] loadNibNamed:@"SearchViewControllerPro" owner:nil options:nil];
SearchViewControllerPro* mapSearchViewController = [xibContents lastObject];
, tut es auch nicht gut:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.
Vorübergehende Lösung:
Ich habe eine Lösung gefunden, aber es ist nicht schön. Trotz der in IB gezeigten Struktur ist der View-Controller 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 dies scheint ohne Laufzeitabstürze zu arbeiten. Es ist jedoch alles außer sauberer Code.
in Bezug auf Ihre bearbeiten .. Sie Fehler in Ihrer Feder haben. Sie müssen sicherstellen, dass die Klassennamen korrekt sind und Sie alle von Ihnen vorgenommenen Verbindungen manuell trennen müssen. Was hast du als Klasse von FilesOwner festgelegt? Welche Verbindungen haben Sie zu FilesOwner hergestellt? – hooleyhoop
Ok es ist egal, was Sie die Klasse von FilesOwner setzen, solange Sie wissen, dass es sich ändert, je nachdem, ob Sie [NSBundle mainBundle] loadNibNamed: ... oder SearchViewControllerPro alloc] initWithNibName: ... also irgendwelche Verbindungen Sie an FilesOwner gemacht werden ungültig sein (Sie werden abstürzen), wenn Sie laden Methode – hooleyhoop