我在使用 NSSavePanel 和 NSOpenPanel 上的附件 View 时遇到问题。
有时,(很多时候)当我打开这些面板之一时,附件 View 不起作用(显示了 View ,但控件似乎被禁用)。
我使用此代码来显示面板:
[openPanel beginSheetModalForWindow:appWindow completionHandler:openPanelHandler];
这仅在启用应用程序沙箱时发生。
经过多次测试,我发现发生的情况是 View 放错了位置(未附加到面板上)。
当我打开任务控制并将鼠标指针移到应用程序窗口上时,我注意到一个“不可见”窗口突出显示,当选择它时,我可以控制附件 View (所有控件都有效),但它似乎与打开的窗口分离或保存面板,如屏幕截图所示。
我尝试创建一个新应用程序只是为了测试此行为,但无法重现它,所以我认为这与我的应用程序有关。
有任何迹象表明我可能做错了什么吗?
我不想只是为了解决这个问题而从头开始编写所有代码。
编辑
顺便说一句,当我关闭窗口时,在窗口关闭之前,附件 View 会闪烁控件的正确值。看来应用程序没有及时添加 View 来显示面板。
更新1
我对用作附件 View 的 View 进行了子类化,并注意到
- (void)viewWillMoveToSuperview:(NSView *)newSuperview
被调用,但是
- (void)viewDidMoveToSuperview
即使 View 正确显示也不会被调用,这是正常行为吗?
更新2
我确认应该调用 - (void)viewDidMoveToSuperview
,在测试应用程序上这两种方法都会被调用。
我还注意到我的应用程序和测试应用程序之间存在细微差别。在我的应用程序上,面板只是向下滑动,但在测试应用程序上,面板似乎“向下翻转”(不知道到底如何描述)。面板的显示方式与我无关,我只是注意到它的显示方式不同。
最佳答案
在尝试了很多方法之后,我得出结论,问题与项目的 ARC(自动引用计数)设置有关。
就我而言,我已在目标上启用 ARC,但未在项目上启用 ARC,在项目上启用 ARC(并处理由此产生的错误和警告)后,现在一切正常。
关于cocoa - 沙盒应用程序中 NSSavePanel 和 NSOpenPanel 上的附件 View 出现奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496696/