【问题标题】:App doesn't close after using NSSavePanel使用 NSSavePanel 后应用程序未关闭
【发布时间】:2012-06-02 21:57:43
【问题描述】:

在使用 NSSavePanel 后关闭我的应用程序时遇到问题... 如果我打开应用程序,使用它然后关闭它,它会以正确的方式关闭...我在 appdelegate 中有这段代码来关闭我的应用程序

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
 {
   return YES;
 }

但是如果我只是打开面板来保存一个 txt 文件...使用 NSSavePanel...如果我只是打开它而不使用它...单击“取消”按钮,我的应用程序不会t 关闭了...如果我单击红色 x 关闭应用程序,窗口会消失,但应用程序仍然处于活动状态,并且无法恢复主窗口。 我用来保存 txt 文件的代码是这样的:

NSSavePanel *save = [NSSavePanel savePanel];

if (nomePartita != nil) 
{
    [save setNameFieldStringValue:nomePartita];
}

[save setAllowedFileTypes:[NSArray arrayWithObject:@"dat"]];
[save setAllowsOtherFileTypes:NO];

NSInteger result = [save runModal];    

if (result == NSOKButton)
{
 // code to save the file here.....
 }

问题必须在这一行中,因为仅此(我的意思是没有用于创建和保存 txt 文件的其余代码)我有这个问题... 任何人都知道为什么会这样? 任何提示将不胜感激! 非常感谢, 和平, 马西

【问题讨论】:

  • 是的,它正在关闭...无论如何我注意到如果我完全使用菜单“关闭应用程序”它工作得很好...所以我正在改变我的应用程序的工作方式它不会关闭当您单击红色 x 按钮但将保持隐藏状态并关闭它时,您需要使用菜单命令...感谢您的关注 Peace Massy

标签: objective-c nssavepanel


【解决方案1】:

试试这个:

   NSSavePanel*    panel = [NSSavePanel savePanel];
   [panel setNameFieldStringValue:newName];
   [panel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result){
        if (result == NSFileHandlingPanelOKButton)
        {
            NSURL*  theFile = [panel URL];
            // Write the contents in the new format.
        }
}];

我遇到了同样的问题,这解决了。 对于窗口,您也可以使用 [NSApp keyWindow]

Apple guideline with sandboxing.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多