Wie zu verwenden NSWindowController zu zeigen, ein Fenster in der standard-Anwendung?
Ich habe eine neue leere standard-Anwendung mit Xcode-Vorlage. Entfernt das Fenster im Hauptmenü.xib und ich erstellte eine neue, angepasste NSWindowController Unterklasse mit einem xib.
Wurden Sie mit dem Namen "WYSunFlowerWindowController.h" und "WYSunFlowerWindowController.m".
Und ich anfügen, dann wird die init-Funktion wie folgt:
- (id)init
{
NSLog(@"init()");
return [super initWithWindowNibName:@"WYSunFlowerWindowController" owner:self];
}
Und meine WYAppDelegate.m-Datei ist wie folgt:
static WYSunFlowerMainWindowController* windowController = nil;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//Insert code here to initialize your application
if (windowController == nil) {
windowController = [[WYSunFlowerMainWindowController alloc] init];
}
[[windowController window] makeKeyAndOrderFront:windowController];
}
Und ich habe das problem, dass das Fenster kann nicht zeigen, dass es selbst nachdem ich die app starten. Wer kann mir sagen, warum? Ist irgendetwas falsch mit meinem code?
Ich bin ein Neuling in Objective-C und cocoa. Also ich denke, dass ich vielleicht einen dummen Fehler, dass ich es nicht herausgefunden habe.
UPDATE:
Hier ist mein Projekt Quelle. Bitten schauen und mir helfen, herauszufinden, was ist mein Fehler。
https://dl.dropbox.com/u/3193707/SunFlower.zip
Ich bin mit der ARC. Ich mache die windowController als ein statisches Feld der AppDelegate-Klasse. Ich denke es wird nicht freigegeben, bis die app beendet wird.
InformationsquelleAutor morphinewan | 2012-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrer init-Methode, ich denke, Sie müssen sich selbst zu den super init ersten, bevor Sie wieder selbst.
Bearbeiten:
Versuchen Sie ersetzen
makeKeyAndOrderFront:
mit[windowController showWindow:self]
Dann, wenn das immer noch nicht funktioniert, überprüfen Sie Ihre Fenster-controller xib, stellen Sie sicher, dass der Besitzer der Datei festgelegt ist WYSunFlowerWindowController und dass der IBOutlet-Fenster (erklärt in NSWindowController) angeschlossen ist, zum Fenster.
Edit 2:
Auskommentieren Ihre @property und @synthetisieren Fenster im controller war der trick. Don ' T redeclare get-und Set-Methoden wurden bereits vordefiniert in einer Oberklasse.
Ich habe alles getan, was Sie erwähnt. Nicht Arbeit. Ich bitte Sie nicht, können Sie download mein Projekt source zu schauen? dl.dropbox.com/u/3193707/SunFlower.zip
Oh mein Gott, es funktioniert! Ich danke Ihnen so sehr. Aber ich bin verwirrt, warum ein Fenster, outlet-Eigenschaft definiert in der Unterklasse wird dieses problem verursachen? Können Sie nicht überschreiben die gleiche Eigenschaft der Klasse, die Eltern?
Das problem ist nicht, dass Sie das überschreiben der Instanz-Variablen, aber du bist überschreiben der getter/setter. NSWindowController wahrscheinlich nicht etwas, um es, Wann immer Sie das Fenster ivar, und damit, warum nichts zeigt sich, wenn Sie außer Kraft setzen. Denken Sie daran, nicht redeclare ivars, als es überhaupt nichts macht, und könnte potenziell gefährlich sein.
Ich sehe. Nochmals vielen Dank.
InformationsquelleAutor TheAmateurProgrammer