Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Cocoa:从一个窗口创建并关闭另一个窗口_Objective C_Macos_Cocoa_Nswindow_Appdelegate - Fatal编程技术网

Objective c Cocoa:从一个窗口创建并关闭另一个窗口

Objective c Cocoa:从一个窗口创建并关闭另一个窗口,objective-c,macos,cocoa,nswindow,appdelegate,Objective C,Macos,Cocoa,Nswindow,Appdelegate,我正在寻找一个最简单的例子,显示一个窗口打开另一个窗口,然后关闭它 我似乎被卡住的地方是笔尖和插座的接线方式。我可以很容易地创建窗口;关闭它是一项挑战 非常感谢任何建议 我在下面附上我的代码。我想我想做的很简单,但不起作用。多亏了Francis,我现在可以打开和关闭窗口,但一旦我再次尝试打开它,应用程序就会崩溃(EXC\u BAD\u ACCESS)。我确信这是因为我对NIB与类的关系理解不足。在大多数语言中,我只需要实例化一个窗口的新实例,然后关闭它 我在main menu.xib中有两个窗口

我正在寻找一个最简单的例子,显示一个窗口打开另一个窗口,然后关闭它

我似乎被卡住的地方是笔尖和插座的接线方式。我可以很容易地创建窗口;关闭它是一项挑战

非常感谢任何建议

我在下面附上我的代码。我想我想做的很简单,但不起作用。多亏了Francis,我现在可以打开和关闭窗口,但一旦我再次尝试打开它,应用程序就会崩溃(
EXC\u BAD\u ACCESS
)。我确信这是因为我对NIB与类的关系理解不足。在大多数语言中,我只需要实例化一个窗口的新实例,然后关闭它

我在
main menu.xib中有两个窗口。(我更喜欢将窗口放在单独的NIB中,但这似乎会产生其他问题!)AppDelegate有两个出口,to window(原始窗口)和otherWindow(创建的第二个窗口)

第一个窗口有两个按钮:“打开窗口”和“关闭窗口”,与代码中的两个方法连接

代码:

MyTestAppDelegate.h


使用XCode 4.1中的“UINavigationController”模板或XCode 4.2中的“Master Detail Application”模板创建一个新项目,然后看看这些东西是如何工作的


如果您对通过查看XCode模板来学习不感兴趣,请查看以下教程:

使用XCode 4.1中的“UINavigationController”模板或XCode 4.2中的“Master Detail Application”模板创建一个新项目,并查看这些内容是如何工作的


如果您对通过查看XCode模板进行学习不感兴趣,请参阅以下教程:

基本上,在NIB中创建各种窗口,添加按钮、文本字段等。然后添加一个自定义对象,作为“控制器”,向窗口和各种控件发送和接收消息。在一个简单的项目中,您可以使用自动创建的AppDelegate对象来控制您的窗口,对于更大的项目,您需要一个单独的对象来处理逻辑,可以是NSObject或NSWindowController的实例,具体取决于您的需要

Windows可以设置为“启动时可见”,在应用程序启动时打开。您还可以通过在头文件中创建IBOutlet引用并在NIB中连接它们来手动打开它们。要显示窗口,请向其发送一条
makekeyandderfront:
消息。要关闭它们,请向它们发送
close
方法

要响应窗口打开/关闭,请将控制器对象指定为windows的“委托”,这意味着它将接收来自windows的消息,这些消息在NSWindowDelegate协议下的文档中列出。因此,如果您想打开一个窗口以响应另一个窗口的关闭,您可以监听
windowWillClose:
消息并告诉另一个窗口打开,反之亦然

这是非常基本的东西,所以我建议你读一读Hillegass的书,或者浏览一些不同的内容

编辑:


您的应用程序正在崩溃,因为您的otherWindow设置为“关闭时释放”,因为您处于内存管理环境中,并且没有任何内容保留该窗口,下次尝试打开它时,它已被释放。解决方案是取消选中NIB文件中的“关闭时释放”。请注意,您还可以将按钮操作直接连接到NIB中另一个窗口本身的
MakeKeyandDerfront:
performClose:
方法。

基本上,在NIB中创建各种窗口,添加按钮、文本字段等。然后添加充当“控制器”的自定义对象在窗口和各种控件之间发送和接收消息的。在一个简单的项目中,您可以使用自动创建的AppDelegate对象来控制您的窗口,对于更大的项目,您需要一个单独的对象来处理逻辑,可以是NSObject或NSWindowController的实例,具体取决于您的需要

Windows可以设置为“启动时可见”,在应用程序启动时打开。您还可以通过在头文件中创建IBOutlet引用并在NIB中连接它们来手动打开它们。要显示窗口,请向其发送一条
makekeyandderfront:
消息。要关闭它们,请向它们发送
close
方法

要响应窗口打开/关闭,请将控制器对象指定为windows的“委托”,这意味着它将接收来自windows的消息,这些消息在NSWindowDelegate协议下的文档中列出。因此,如果您想打开一个窗口以响应另一个窗口的关闭,您可以监听
windowWillClose:
消息并告诉另一个窗口打开,反之亦然

这是非常基本的东西,所以我建议你读一读Hillegass的书,或者浏览一些不同的内容

编辑:


您的应用程序正在崩溃,因为您的otherWindow设置为“关闭时释放”,因为您处于内存管理环境中,并且没有任何内容保留该窗口,下次尝试打开它时,它已被释放。解决方案是取消选中NIB文件中的“关闭时释放”。请注意,您还可以将按钮操作直接连接到NIB中另一个窗口本身的
MakeKeyandDerfront:
performClose:
方法。

提到“windows”表示海报没有处理iOS。非常感谢您的回复。也许我应该更清楚,我要找的是Mac应用程序,而不是iOS应用程序。话虽如此,我还是会看一些例子,以防有代码与我想做的类似。@Rick cocoa标签暗示Mac OS X上的cocoa。对于iOS,苹果使用的名称是cocoa Touch;在堆栈溢出时,对应的
#import <Cocoa/Cocoa.h>

@interface MyTestAppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *window;
    NSWindow *otherWindow;
}

@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSWindow *otherWindow;

- (IBAction)openOtherWindow:(id)sender;
- (IBAction)closeOtherWindow:(id)sender;

@end
#import "MyTestAppDelegate.h"

@implementation MyTestAppDelegate

@synthesize window;
@synthesize otherWindow;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

- (IBAction)openOtherWindow:(id)sender
{
    [otherWindow makeKeyAndOrderFront:sender];
}

- (IBAction)closeOtherWindow:(id)sender
{
    [otherWindow close];
}
@end