Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么OSX/Cocoa dock图标在离开之前会恢复为默认值?_Objective C_C_Macos_Cocoa_Cross Platform - Fatal编程技术网

Objective c 为什么OSX/Cocoa dock图标在离开之前会恢复为默认值?

Objective c 为什么OSX/Cocoa dock图标在离开之前会恢复为默认值?,objective-c,c,macos,cocoa,cross-platform,Objective C,C,Macos,Cocoa,Cross Platform,我正在将一些Cocoa功能包装到Objective-C库中,该库将从跨平台C库调用。我的目标之一是为在Linux上用C进行开发的人提供部署到OSX的能力,而无需进入XCode、nib文件等。我希望他们能够使用命令行工具在OSX上编译和链接他们的代码,并最终得到一个带有常用按钮的常规可调整大小的主窗口,等等,一个应用程序菜单和一个停靠图标,其外观和行为符合预期,等等 我正在开发OSX 10.8.5。我已经安装了XCode 5.0。这是我的gcc--version输出: Configured wit

我正在将一些Cocoa功能包装到Objective-C库中,该库将从跨平台C库调用。我的目标之一是为在Linux上用C进行开发的人提供部署到OSX的能力,而无需进入XCode、nib文件等。我希望他们能够使用命令行工具在OSX上编译和链接他们的代码,并最终得到一个带有常用按钮的常规可调整大小的主窗口,等等,一个应用程序菜单和一个停靠图标,其外观和行为符合预期,等等

我正在开发OSX 10.8.5。我已经安装了XCode 5.0。这是我的
gcc--version
输出:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.76) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix
我已经知道了如何在不使用XCode或任何nib或plist的情况下以编程方式显示主窗口、如何设置应用程序菜单以及其他各种事情,但是我遇到了dock图标的问题

我通过调用以下命令设置自定义停靠图标图像:

[NSApp setApplicationIconImage:dockImage];
当用户退出应用程序时,dock图标图像在离开前短暂地恢复为其他图标(某种默认应用程序图标或视图)。如果不使用XCode创建nib或plist,如何防止这种情况发生

我已尝试将
NSApp
的激活策略设置为在应用程序代理的
applicationshouldtimited
方法中禁用,以尝试在发生此切换之前隐藏停靠图标。这没有帮助,它确实隐藏了窗口和dock图标,但dock图标仍然会短暂地切换回默认图标,作为隐藏过程的一部分。我通过返回
NSTerminateLator
确认了这一点,并确认将激活策略设置为“禁止”确实会导致dock和图标隐藏,即使应用程序未终止,也不会将其设置为隐藏

我已经尝试过子类化
NSApplication
并重写
setapplicationimage
调用。我已经确认,在程序退出之前,它正在被第二次调用,不是由我的代码调用(或者不是直接由我的代码调用)。我已经尝试通过第一次调用超级函数来阻止对它的第二次调用,但不是第二次,并且我已经确认该函数中的代码可以阻止我的代码更改应用程序图标,但这并没有解决问题。不管怎样,它还是会发生

我还尝试移除应用程序徽章,如下所示:

[[window dockTile] setShowsApplicationBadge: NO];
以防万一,这与此有关,但那不起作用。文件上说,从10.6开始,应用程序徽章就不再相关了,但我已经抓住了救命稻草

在编程方面遇到了难题,我现在正在尝试如何在不使用XCode的情况下从头开始打包.app,看看是否可以从头开始创建一个包含应用程序映像引用的plist。但是编程解决方案更可取,因为我真的希望尽量减少部署中特定于OSX的打包

另一种可能是使用XCode一次,生成一个非常通用的、基本的.app,我的部署脚本可以复制和修改它


请不要因为我的问题“太宽泛”或“没有建设性”之类的话而否定我。我意识到我正在重新发明已经存在于各种形式的轮子,但是没有法律禁止尝试建立一个更好的捕鼠器,或者只是一个不同的,甚至更糟糕的捕鼠器。我意识到我正在试图解决一个问题,很多人会认为无关紧要,但是XCODEL产生的应用程序没有这个问题,我真的不希望我正在创建的工具来产生任何像这样的用户可见的工件。我不想贬低苹果的工具链,也不想引起关于我所追求的东西是否应该被追求的争论。我有一个特定的技术问题,我正在寻找解决方案,这是在我的目标的限制范围内

仅供参考,你可能会发现这很有趣:我以前看到过,这很不错。三年后仍然有效。我看到它生成的默认图标与我的自定义图标在终止时恢复的默认图标相同。