对象的自定义init方法,以initWithWindowNibName为NSWindowController属性

时间:2012-09-23 19:39:17

标签: objective-c cocoa nswindowcontroller

我要做的是为打开窗口的对象创建一个方法。 在这个窗口中,我想输出对象实例的一些属性。 为此,我创建了一个NSObject的“Profile”子类,它有一个名为“view”的NSWindowController属性。

@interface Profile : NSObject {
    \\...
}

@property (readwrite, assign) NSWindowController *view;

由于我无法使用Interface Builder将“视图”连接到窗口(或者至少我不知道如何),我必须使用“initWithWindowNibName”。所以我尝试重写“Profile”的init方法,如下所示:

-(Profile *)init{
    self = [super init];
    if(self){
        [[self view] initWithWindowNibName:@"Profile"];
    }
    return self;
}

我不知道我的方法是否正确,事实是当我尝试显示窗口时它没有出现。这是我尝试的方式:

Profile *profile = [[Profile alloc] init];
[[profile view] showWindow:self];

希望你能提供帮助:)

1 个答案:

答案 0 :(得分:2)

你不想要这样的东西:

@interface Profile:NSObject

@property (nonatomic, strong) NSWindowController *windowController;

@end

- (Profile *)init {
    self = [super init];
    if( !self ) { return nil; }

    self.windowController = [[NSWindowController alloc] initWithWindowNibName:@"Profile"];
    return self;
}

// show window
Profile *profile = [[Profile alloc] init];
[[profile windowController] showWindow:self];

(我假设ARC。)

修改 为了清楚OP,我遵循了他的属性命名法,即命名NSWindowController属性view。这很令人困惑,但因为NSWindowController不是视图。为了清楚别人,我改变了它。