2012-04-05 78 views
1

我想制作一个无窗应用程序。问题是我使用的框架有时会显示一些警告框,我无法抑制它们(至少在没有崩溃的情况下)。防止窗户打开(无窗应用程序)

我已将LSBackgroundOnly设置为1(在info.plist应用程序文件中),但这似乎不起作用。任何机会我错过了这里的东西(也许一些其他设置,我需要设置)?

我也试过NSWindow创建一个类别:

  1. 被覆盖的allocallocWithZone:所以没有窗口被创建。这适用于某些情况,但启动模态会话会引发异常(因为发送一个零参数为beginModalSessionForWindow:)。

  2. 尝试覆盖的NSApplication的beginModalSessionForWindow:和返回nil每次,但是这会导致某处框架EXC_BADACCESS(runModalSession:endModalSession:也被改写,但崩溃是任何人被称为前)。

任何其他想法都会受到欢迎。

如果有帮助,我使用的框架是Twain.Framework,所以如果有人知道阻止所有用户界面的方法(包括设备未连接时显示的错误警报),它将是很棒,如果你分享。

+0

我是iPhone开发新手。当时正在阅读“视图编程指南”。苹果在文档中称“每个应用程序至少有一个窗口”。那么如何制作无窗口的应用程序?请清除我的基本知识.. plsss .... – 2012-04-05 08:25:08

+1

@hpiOSCoder对此感到抱歉,添加了osx标签。该应用程序是为Mac构建的。 – 2012-04-05 08:26:40

+0

okk。我对执行这样的想法感到非常好奇和好奇。感谢您的更新 – 2012-04-05 08:29:58

回答

0

我设法使它“无窗户”(有些窗口仍然显示,但至少它们不可见,并且它们会自动关闭)。我只处理模态窗口,因为这些显示在我的情况。

  1. 我做了一个类别NSWindow,让所有的窗户都是无形的,不能成为关键,主窗口:

    -(BOOL)canBecomeKeyWindow{ 
        [self setOpaque:NO]; 
        self.alphaValue = 0; 
        return NO; 
    } 
    -(BOOL)canBecomeMainWindow{ 
        [self setOpaque:NO]; 
        self.alphaValue = 0; 
        return NO; 
    } 
    
  2. 子类,NSApplication

    -(NSInteger)runModalForWindow:(NSWindow *)aWindow{ 
        return NSCancelButton; 
    } 
    -(NSModalSession)beginModalSessionForWindow:(NSWindow *)aWindow{ 
        NSModalSession session = [super beginModalSessionForWindow:aWindow]; 
        [aWindow performSelector:@selector(close) withObject:nil afterDelay:1]; 
        return session; 
    } 
    

但是,这并没有多大帮助。在runModalForWindow:的情况下,一切都很好,因为窗口的所有者收到了回复。在beginModalSessionForWindow:的情况下,应用程序卡住了,很可能是因为窗口的所有者正在等待它从未收到的特定事件(例如按钮点击)。

0

目前尚不清楚你期待什么。你是否希望有一款应用程序不能正常显示窗口,但允许第三方框架显示其警报?或者你是否希望找到一种方法来防止框架显示其警报,所以你的应用程序绝对是从来没有有任何窗口?

如果是前者,那么您可能正在寻找LSUIElement。这是一个应用程序,它可以有一些UI元素,但不会显示在Dock或Command-Tab应用程序切换器中,并且没有菜单栏。

+0

感谢您的回复。我希望应用程序根本不显示任何UI。 – 2012-04-06 07:36:45