Ich versuche, eine Kategorie auf meinem MainContainerViewController zu implementieren, die die Haupt-Instanz zurückgibt:Implementierung eines UIViewController Kategorie
In meinem .h:
@interface UIViewController(MainViewExtension)
/** Convience method for getting access to the MainContainerViewController instance */
- (MainContainerViewController *)mainContainerExtension;
@end
In meinem .m
@implementation UIViewController(MainViewExtension)
- (MainContainerViewController *)mainContainerExtension
{
return (MainContainerViewController *)self;
}
@end
Und so von einigen Außenansicht Controller, ich selbst.mainContainerExtension auf die Instanz zugreifen, und es ist nur eine Instanz deklariert, aber es gibt mir nicht die richtige Instanz.
NSLog(@"number of children:%i", [self.mainContainerExtension.childViewControllers count]);
Dies gibt 0 zurück, obwohl es 3 sein sollte, also weiß ich, dass es mir nicht die richtigen Ergebnisse gibt. Fehle ich etwas?
Edit: So wie ich es weiß, ist mir nicht die richtige Instanz geben, weil in der viewDidLoad
der MainContainerViewController
, ich habe dies:
- (void)viewDidLoad
{
appDelegate.notesViewController=[[NotesViewController alloc] init];
appDelegate.notesViewController.mainContainer=self;
[self addChildViewController: appDelegate.notesViewController];
}
Jede NotesViewController
eine Eigenschaft vom Typ hat MainContainerViewController
, so dass Ich habe immer eine Möglichkeit, die MainContainerViewController
von NotesViewControllers
zugreifen. Aber ich habe gerade etwas über Kategorien und Erweiterungen gelernt, und ich dachte, es wäre vielleicht einfacher, eine Kategorie zu implementieren, die mir Zugriff auf die Containeransicht gibt, unabhängig davon, in welcher Ansicht ich bin, anstatt eine Eigenschaft auf jedem View-Controller zu haben. Es ist mein erstes Mal, also bin ich mir sicher, dass ich etwas falsch mit meiner Kategorie-Implementierung mache, nur nicht sicher, was es ist.
Versuchen Sie, ein Singleton zu erreichen? Können Sie Code einfügen, der einen fehlgeschlagenen Vergleich anzeigt? Das heißt, theExpectedHandleToVC! = Self.mainContainerExtension. Dieser Vergleich oder NSLog (@ "% p", self) ist eine direktere Art zu testen, ob es funktioniert. – danh
Meine Ausgabe für 'NSLog (@% @", self.mainContainerExtension) 'ist:' '. Nicht wirklich sicher, was das bedeutet –
Snowman
Es ist der Zeiger auf die Instanz.Können Sie NSLog, was Sie erwarten Mit anderen Worten, was bringt Sie auf den Gedanken, dass es falsch ist? Ein typischer (nicht tabulatorgestützter) UIViewController sollte 0 childViewControllers haben. – danh