我正在从一本书的教程中创建一个应用程序,但我注意到一个问题,当我创建的首选项窗口打开然后关闭它将无法再次打开时,我该如何解决这个问题?
感谢。
编辑:我看到另一篇关于此的帖子,但仍然没有回答,所以我想知道你是否能为我回答这个问题。 编辑:我说的是一个面板(使用偏好窗格),它是通过菜单项打开的,并且在窗口的一角用十字架关闭。我用来创建它的代码来自Book,Cocoa Programming For Mac OS X,用作首选项窗格的Panel位于一个单独的nib文件中。编辑:这是代码,它很复杂,因为教程让你创建了4个文件。
1)Preferences_Delegate.h
#import <Cocoa/Cocoa.h>
@class PreferenceController;
@interface Prefernces_Delegate : NSObject {
PreferenceController *preferenceController;
}
- (IBAction)showPreferencePanel:(id)sender;
@end
2)Preferences_Delegate.m
#import "Prefernces_Delegate.h"
#import "PreferenceController.h"
@implementation Prefernces_Delegate
- (IBAction)showPreferencePanel:(id)sender
{
// Is preferenceController nil?
if (!preferenceController) {
preferenceController = [[PreferenceController alloc] init];
}
NSLog(@"showing %@", preferenceController);
[preferenceController showWindow:self];
}
@end
3)PreferencesController.h(不重要)
#import <Cocoa/Cocoa.h>
@interface PreferenceController : NSWindowController {
IBOutlet NSButton *checkbox;
}
- (IBAction)changeNewEmptyDoc:(id)sender;
@end
4)PreferencesController.m
#import "PreferenceController.h"
@implementation PreferenceController
- (id)init
{
if (![super initWithWindowNibName:@"Preferences"])
return nil;
return self;
}
- (void)windowDidLoad
{
NSLog(@"Nib file is loaded");
}
- (IBAction)changeNewEmptyDoc: (id)sender
{
int state = [checkbox state];
NSLog(@"Checkbox changed %d", state);
}
@end
答案 0 :(得分:5)
在Interface Builder中,确保在Window的属性中关闭关闭时释放。还要仔细检查窗口控制器与窗口之间的连接是否正常连接。
答案 1 :(得分:1)
确保windowController中的窗口变量已连接到面板。