2 年前的代码现在不起作用(WindowController 分配)

2 years old code do not work now(WindowController alloc)

以下代码在 2 年前有效

今天我尝试重建

AppDelegate.h

#import <Cocoa/Cocoa.h>
#include <stdio.h> 
#include <CoreServices/CoreServices.h>
#include <Carbon/Carbon.h>

@class EnterWindowController;


@interface AppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *window;

    EnterWindowController *vEnterWindowController;

}

@property (retain,nonatomic) EnterWindowController *vEnterWindowController;


@end

AppDelegate.m

#import "AppDelegate.h"
#include <stdio.h> 
#include <CoreServices/CoreServices.h>
#include <Carbon/Carbon.h>

#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>
#import "EnterWindowController.h"

@implementation AppDelegate;
@synthesize vEnterWindowController;

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    if(!vEnterWindowController)
    {


        vEnterWindowController=[[EnterWindowController alloc] init];

    }


    [vEnterWindowController showWindow:self];//point A
 }

EnterWindowController相关的enterwidow不显示, 我将断点设置在A处,发现vEnterWindowController为nil, 看起来像

 vEnterWindowController=[[EnterWindowController alloc] init]; 

不起作用,总是 returns 零。

欢迎您的评论

此语法适用于我使用 Xcode 6.1:

if (!vEnterWindowController)
{
    vEnterWindowController = [[EnterWindowController alloc] initWithWindowNibName:@"yourWindowNibName"];
}

[vEnterWindowController showWindow:self];

顺便说一句,您也可以在 .h 文件中使用

#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
#import <AppKit/AppKit.h>

@interface AppDelegate : NSObject <NSApplicationDelegate, , NSWindowDelegate> {

    @public

    EnterWindowController *vEnterWindowController;
}
@property (assign) IBOutlet NSWindow *window;

而且您不需要合成 vEnterWindowController。您也不需要在 .m 文件中合成 window。

NSWindowDelegate 协议添加到 AppDelegate 还可以方便地接收有关主要 window.

的通知