Firemonkey 应用程序中的 TOpenDialog 似乎存在问题,该应用程序已为 Mac Appstore 沙盒化。我使用 XE3,但它也存在于 XE2 中。我居然在这里找到了一份QC报告,但还是没有解决:
http://qc.embarcadero.com/wc/qcmain.aspx?d=105344
有没有人遇到过同样的问题,或者有任何解决方法的想法?
这很容易检查。只需在窗体上放置一个 TOpenDialog 并调用 Execute 方法。根据 Embarcadero 说明对应用程序进行签名和沙箱处理:
http://docwiki.embarcadero.com/RADStudio/en/Mac_OS_X_Application_Development
调用 Execute 时会有延迟,应用程序会冻结片刻,但没有显示任何内容。没有异常或错误消息。如果应用程序没有被沙盒化,则对话框可以正常工作。
这段代码也不起作用,所以问题可能出在TOpenDialog调用的TNSOpenPanel的某个地方,但不幸的是我找不到它。
var
LOpenDir: NSOpenPanel;
begin
LOpenDir := TNSOpenPanel.Wrap(TNSOpenPanel.OCClass.openPanel);
LOpenDir.runModal;
LOpenDir.release;
我在Apple 文档中读到,与没有沙箱的相比,使用沙箱的 NSOpenPanel 派生自不同的类。我想这是问题的原因。
任何想法将不胜感激。如果没有打开/保存对话框,我们就不能真正发布一个必须处理文件的应用程序 :)
顺便说一句,我尝试了项目选项中权利的几种组合,但它们没有效果。