结构简单:
示例控制器.h:
#import <Foundation/Foundation.h>
@interface exampleController : NSWindowController {
@public
IBOutlet NSPanel *entryPanel;
@property (nonatomic, strong) IBOutlet NSPanel *entryPanel;
@end
示例控制器.m:
#import "exampleController.h"
@implementation exampleController
@synthesize entryPanel;
- (id)init {
self = [super initWithWindowNibName:@"ExamplePanel"];
if (self) {
// Initialization code here.
NSLog(@"entryPanel: %@", entryPanel);
[self.entryPanel setTitle:@"TESTING!"];
}
return self;
}
随机控制器.m:
...
- (id) init {
self = [super init];
if (self) {
// loading our example controller if it isn't loaded yet.
if (!ourExampleController) {
ourExampleController = [exampleController alloc] init];
}
}
return self;
}
...然后在一个方法中的随机控制器中,我通过以下方式显示 NSPanel:
[ourExampleController showWindow:self];
[ourExampleController window] makeKeyAndOrderFront:self];
我的问题是,无论如何,第一次 NSPanel 显示并显示自己时,标题始终仍设置为它在 Interface Builder 中的标题!即使我在exampleController init 方法中明确设置了标题。
我还尝试在 exampleController 的 init 方法中抛出NSLog(@"entryPanel: %@", entryPanel)并且在启动时它始终为 NULL。我不必在 init 中分配我所有的 IBOutlets,因为我已经在合成它们了?
我已经仔细检查了界面生成器中的所有内容。ExamplePanel.xib 的文件所有者设置为 exampleController 类。window 和 entryPanel 出口都引用了我们的 xib 文件中的 NSPanel。我错过了什么??
提前致谢!
编辑:只是添加。如果我打开窗口(..并看到默认的 IB 标题)然后关闭它并使用更改标题的方法重新打开它 - 它似乎有效!这个问题似乎只存在于第一次打开的窗口中。似乎在窗口第一次打开之前我的属性没有被分配?