为啥应用程序窗口只打开一次,然后再不打开?

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变量连接到面板。

【讨论】:

以上是关于为啥应用程序窗口只打开一次,然后再不打开?的主要内容,如果未能解决你的问题,请参考以下文章

winform如何让窗体只打开一次

C#多文档程序中如何只打开一个子窗口

一次只打开一个子窗体的实例c#

解决只打开一次浏览器,测试多条用例?

为啥在开机之后interent浏览器只能打开一次,以后就再也打不开了,怎么解决,急要

arcmap 打开的时候,为啥提示arcgis desktop 应用程序发生严重的错误,怎么解决!