为啥应用程序窗口只打开一次,然后再不打开?
Posted
技术标签:
【中文标题】为啥应用程序窗口只打开一次,然后再不打开?【英文标题】:Why is App window only opening once and then not opening again?为什么应用程序窗口只打开一次,然后再不打开? 【发布时间】:2009-05-07 16:49:49 【问题描述】:我正在根据书中的教程创建应用程序,但我注意到一个问题,当我创建的首选项窗口打开然后关闭时它不会再次打开,我该如何解决这个问题?
谢谢。
编辑:我看到了另一篇关于此的帖子,但仍未得到答复,所以我想知道您是否可以为我回答这个问题。
编辑:我说的是一个面板(使用首选项窗格),它通过菜单项打开,并在窗口角落用十字关闭。我用来创建它的代码来自《Mac OS X 的 Cocoa Programming》一书,用作首选项窗格的面板位于单独的 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
【问题讨论】:
您可能想为这个问题添加一些上下文。什么时候开?你怎么关闭它?你调用什么方法来尝试打开它? 你是不是故意含糊其辞? “真正的基本应用程序”? “窗口打开然后关闭它不会再次打开”? “看到另一个关于这个的帖子”?有这么多可能的场景你可以参考,这太荒谬了。 不,刚刚更新了第一篇文章,提供了更多信息。 你希望问题有多大,你不希望问题太长,因为没人会看。 我对 Cocoa 了解不多,但是从什么时候开始有人阻止了 intertubes?是否有可能,尽管窗口正在关闭,但应用程序本身并没有清理并退出? 【参考方案1】:在 Interface Builder 中,确保在 Window 的属性中关闭 Release on close。还要仔细检查窗口控制器与窗口之间的连接是否连接正常。
【讨论】:
如何连接窗口?因为它在教程中没有说明任何内容。 谢谢,你是对的,我错过了教程中告诉你连接窗口的步骤。【参考方案2】:确保windowController中的window变量连接到面板。
【讨论】:
以上是关于为啥应用程序窗口只打开一次,然后再不打开?的主要内容,如果未能解决你的问题,请参考以下文章