我在NSSavePanel和NSOpenPanel上遇到了附件视图的问题。
有时,(经常)当我打开其中一个面板时,附件视图不起作用(显示视图但控件似乎已禁用)。
我正在使用此代码显示该面板:
[openPanel beginSheetModalForWindow:appWindow completionHandler:openPanelHandler];
仅在启用app-sandbox时才会发生这种情况。
经过大量测试后,我发现发生的事情是视图错位(未附在面板上)。
当我打开Mission Control并将鼠标指针移动到应用程序窗口时,我注意到一个“隐形”窗口是高亮的,当选择它时我可以控制附件视图(所有控件都可以工作)但它看起来与开放式分离或保存面板,如屏幕截图所示。
我尝试创建一个新的应用程序只是为了测试这种行为,但无法重现它,所以我想这与我的应用程序有关。
任何我可能做错的提示?
我不想为了解决这个问题而从头开始编码。
修改
只是旁注,当我关闭窗口时,就在窗口关闭之前,附件视图会闪烁,并显示控件的正确值。看来应用程序没有及时添加视图来显示面板。
更新1
我将用作附件视图的视图子类化并注意到
- (void)viewWillMoveToSuperview:(NSView *)newSuperview
被调用,但是
- (void)viewDidMoveToSuperview
即使正确显示视图也不会被调用,这是正常行为吗?
更新2
我确认应该调用- (void)viewDidMoveToSuperview
,在测试应用程序中调用两个方法。
我还注意到我的应用和测试应用之间存在细微差别。在我的应用程序中,面板只是向下滑动,但在测试应用程序中,面板似乎“向下翻转”(不知道具体如何描述)。面板显示的方式与我无关,我只是注意到它没有以相同的方式显示。
答案 0 :(得分:1)
在尝试了很多事情后,我得出结论,问题与项目的ARC(自动引用计数)设置有关。
在我的情况下,我在目标上启用了ARC但在项目上没有启用ARC,在项目上启用ARC(并处理产生的错误和警告)之后,现在一切正常。