cocoa - 沙盒应用程序中 NSSavePanel 和 NSOpenPanel 上的附件 View 出现奇怪行为

标签 cocoa sandbox nsopenpanel nssavepanel accessoryview

我在使用 NSSavePanel 和 NSOpenPanel 上的附件 View 时遇到问题。

有时,(很多时候)当我打开这些面板之一时,附件 View 不起作用(显示了 View ,但控件似乎被禁用)。

我使用此代码来显示面板:

[openPanel beginSheetModalForWindow:appWindow completionHandler:openPanelHandler];

这仅在启用应用程序沙箱时发生。

经过多次测试,我发现发生的情况是 View 放错了位置(未附加到面板上)。

当我打开任务控制并将鼠标指针移到应用程序窗口上时,我注意到一个“不可见”窗口突出显示,当选择它时,我可以控制附件 View (所有控件都有效),但它似乎与打开的窗口分离或保存面板,如屏幕截图所示。

Screenshot

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

有任何迹象表明我可能做错了什么吗?

我不想只是为了解决这个问题而从头开始编写所有代码。

编辑

顺便说一句,当我关闭窗口时,在窗口关闭之前,附件 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/

相关文章:

objective-c - cocoa 内存管理问题

macos - Macintosh 文件是文具本吗?

macos - 核心数据 EXC_BAD_ACCESS 保存失败?

cocoa - 在 Cocoa 中存储下载的文件

php - 应用内购买(沙盒) - 由于 curl/SSL 收据验证失败

objective-c - 当调用 NSOpenPanel 的 runModal 时,我的应用程序将无法正确终止

objective-c - NSOpenPanel 允许选择包但不显示内容

objective-c - Objective-C 中的类级别属性(删除警告)

macos - NSOpenPanel 总是尝试在单击时重命名文件

javascript - 使用 polyfill 或 shim 让 HTML5 沙箱适用于 IE8/9