我已经能够注册我自己的机器端口以捕获我的应用程序中的机器异常,并且当我以32位为目标时它可以很好地工作.但是,当我以64位为目标时,我的异常处理程序catch_exception_raise()被调用,但传递给处理程序的异常代码数组是32位宽.预计这是32位版本,但不是64位版本.
在我捕获EXC_BAD_ACCESS第一个代码的情况下是错误号,第二个代码应该是错误的地址.由于第二个代码是32位宽,因此64位错误地址的高32位被截断.
我发现了一个标志<mach/exception_types.h>,我可以在通task_set_exception_ports()称为MACH_EXCEPTION_CODES从看达尔文源似乎控制传递给处理程序代码的大小.它似乎意味着要传递给传入的行为task_set_exception_ports().
但是,当我执行此操作并触发异常时,我的机器端口会收到通知,我调用exc_server()但我的处理程序永远不会被调用,并且当回复消息被发送回内核时,我得到默认的异常行为.
我的目标是10.6 SDK.
我真的希望苹果能更好地记录这些东西.有人有主意吗?
我有一个窗口,我希望能够全屏,而不允许访问Dock或菜单栏.
我通过设置窗口集合行为来启用全屏支持NSWindowCollectionBehaviorFullScreenPrimary.我已尝试在IB中设置收集行为并setCollectionBehavior:直接调用,但它对问题没有影响.
我的窗口委托也响应window:willUseFullScreenPresentationOptions:返回选项NSApplicationPresentationFullScreen | NSApplicationPresentationHideDock | NSApplicationPresentationHideMenuBar
该窗口在标题栏中提供了全屏按钮,可以移入和移出全屏模式,所以我知道我已经正确设置了全屏支持.
菜单栏的行为完全符合我提供的演示选项.
这个码头是一个不同的故事,它总是表现得好像我通过了自动隐藏选项,当我将鼠标移动到屏幕底部时无论我提供什么选项都会滑入视图 window:willUseFullScreenPresentationOptions:
这真的很奇怪,因为我得到一个带有自动隐藏扩展坞的隐藏菜单栏,如果你要返回这个等效的flags(NSApplicationPresentationAutoHideDock | NSApplicationPresentationHideMenuBar)组合,window:willUseFullScreenPresentationOptions:你会得到一个异常,说该组合无效.
我错过了什么吗?
更新1:
在OS X 10.8上试过这个,它就像文档指出的那样工作.在OS X 10.9和OS X 10.10上,它每次都会失败.还尝试了Apple的示例代码项目"FullScreenWindow",它像我一样指定标志,它也无法隐藏10.9和10.10上的停靠点,在10.8上完美运行.
我认为这可能是一个Apple漏洞,或者是该功能的问题,或者,如果他们弃用了该功能,那么它就是一个文档错误,因为它没有在任何地方指出.
我用Apple登录了它.
更新2:
找到了解决方案!
看来你不仅要提供windows演示选项.但似乎应用程序有自己的显示选项,将覆盖Windows选项.
添加到我的窗口委托,一切正常.
- (void)windowWillEnterFullScreen:(NSNotification*)notification
{
[[NSApplication sharedApplication] setPresentationOptions:NSApplicationPresentationHideMenuBar | NSApplicationPresentationHideDock];
}
- (void)windowDidExitFullScreen:(NSNotification*)notification
{
[[NSApplication sharedApplication] setPresentationOptions:NSApplicationPresentationDefault];
}
Run Code Online (Sandbox Code Playgroud)