在沙盒应用程序中NSSavePanel和NSOpenPanel上的附件视图的奇怪行为

时间:2012-07-16 00:06:11

标签: cocoa sandbox nsopenpanel nssavepanel accessoryview

我在NSSavePanel和NSOpenPanel上遇到了附件视图的问题。

有时,(经常)当我打开其中一个面板时,附件视图不起作用(显示视图但控件似乎已禁用)。

我正在使用此代码显示该面板:

[openPanel beginSheetModalForWindow:appWindow completionHandler:openPanelHandler];

仅在启用app-sandbox时才会发生这种情况。

经过大量测试后,我发现发生的事情是视图错位(未附在面板上)。

当我打开Mission Control并将鼠标指针移动到应用程序窗口时,我注意到一个“隐形”窗口是高亮的,当选择它时我可以控制附件视图(所有控件都可以工作)但它看起来与开放式分离或保存面板,如屏幕截图所示。

Screenshot

我尝试创建一个新的应用程序只是为了测试这种行为,但无法重现它,所以我想这与我的应用程序有关。

任何我可能做错的提示?

我不想为了解决这个问题而从头开始编码。

修改

只是旁注,当我关闭窗口时,就在窗口关闭之前,附件视图会闪烁,并显示控件的正确值。看来应用程序没有及时添加视图来显示面板。

更新1

我将用作附件视图的视图子类化并注意到

- (void)viewWillMoveToSuperview:(NSView *)newSuperview

被调用,但是

- (void)viewDidMoveToSuperview

即使正确显示视图也不会被调用,这是正常行为吗?

更新2

我确认应该调用- (void)viewDidMoveToSuperview,在测试应用程序中调用两个方法。

我还注意到我的应用和测试应用之间存在细微差别。在我的应用程序中,面板只是向下滑动,但在测试应用程序中,面板似乎“向下翻转”(不知道具体如何描述)。面板显示的方式与我无关,我只是注意到它没有以相同的方式显示。

1 个答案:

答案 0 :(得分:1)

在尝试了很多事情后,我得出结论,问题与项目的ARC(自动引用计数)设置有关。

在我的情况下,我在目标上启用了ARC但在项目上没有启用ARC,在项目上启用ARC(并处理产生的错误和警告)之后,现在一切正常。