- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序中有响应“打开文档”(odoc) 事件的代码。在 Mac OS X Tiger 和 Leopard 中,此代码运行良好:
- (void) handleOpenDocumentEvent:
(NSAppleEventDescriptor*)event
withReplyEvent:(NSAppleEventDescriptor*)replyEvent
{
NSAppleEventDescriptor const *const dirObj =
[event descriptorForKeyword:keyDirectObject];
DescType const dirObjType = [dirObj descriptorType];
if ( dirObjType == 'alis' ) {
//
// Open a single file.
//
NSData const *const data = [dirObj data];
AliasHandle const fileHandle =
reinterpret_cast<AliasHandle>( ::NewHandle( [data length] ) );
if ( fileHandle ) {
[data getBytes:*fileHandle];
err = [self queueFile:fileHandle fromSender:senderSig];
}
} else if ( dirObjType == 'list' ) {
//
// Open multiple files.
//
AliasHandle fileHandle =
reinterpret_cast<AliasHandle>( ::NewHandle( 0 ) );
if ( fileHandle ) {
int const numItems = [dirObj numberOfItems];
for ( int i = 1; i <= numItems; ++i ) {
NSData const *const data = [[dirObj descriptorAtIndex:i] data];
::SetHandleSize( reinterpret_cast<Handle>( fileHandle ), [data length] );
if ( (err = ::MemError()) != noErr )
break;
[data getBytes:*fileHandle];
err = [self queueFile:fileHandle fromSender:senderSig];
if ( err != noErr )
break;
}
}
}
}
但是,在 Mac OS X Snow Leopard 下,此代码不起作用。以下是 Leopard 系统中 AppleEvent 的转储:
{ 1 } 'aevt': aevt/odoc (i386){
return id: 1012269061 (0x3c560005)
transaction id: 0 (0x0)
interaction level: 112 (0x70)
reply required: 0 (0x0)
remote: 0 (0x0)
for recording: 0 (0x0)
reply port: 150031 (0x24a0f)
target:
{ 1 } 'psn ': 8 bytes {
{ 0x0, 0x655655 } (iPhoto)
}
fEventSourcePSN: { 0x0,0x655655 } (iPhoto)
optional attributes:
< empty record >
event data:
{ 1 } 'aevt': - 1 items {
key '----' -
{ 1 } 'list': - 1 elements {
{ 1 } 'alis': 326 bytes {
/Users/pjl/Pictures/IMG_8501.JPG
}
}
}
}
以下是 Snow Leopard 系统中 AppleEvent 的转储:
{ 1 } 'aevt': aevt/odoc (i386){
return id: 5173 (0x1435)
transaction id: 0 (0x0)
interaction level: 112 (0x70)
reply required: 0 (0x0)
remote: 0 (0x0)
for recording: 0 (0x0)
reply port: 81695 (0x13f1f)
target:
{ 1 } 'psn ': 8 bytes {
{ 0x0, 0x17c17c } (iPhoto)
}
fEventSourcePSN: { 0x0,0x17c17c } (iPhoto)
optional attributes:
< empty record >
event data:
{ 1 } 'aevt': - 1 items {
key '----' -
{ 1 } 'list': - 1 elements {
{ 1 } 'bmrk': 944 bytes {
000: 626f 6f6b b003 0000 0000 0110 1000 0000 book............
001: c002 0000 0500 0000 0101 0000 5573 6572 ............User
002: 7300 0000 0300 0000 0101 0000 706a 6c00 s...........pjl.
003: 0800 0000 0101 0000 5069 6374 7572 6573 ........Pictures
004: 0e00 0000 0101 0000 6950 686f 746f 204c ........iPhoto L
005: 6962 7261 7279 0000 0800 0000 0101 0000 ibrary..........
006: 4d6f 6469 6669 6564 0400 0000 0101 0000 Modified........
007: 3230 3037 0b00 0000 0101 0000 4a75 6e20 2007........Jun
008: 392c 2032 3030 3700 0c00 0000 0101 0000 9, 2007.........
009: 494d 475f 3633 3837 2e6a 7067 2000 0000 IMG_6387.jpg ...
....
058: 0000 0000 30f0 0000 3002 0000 0000 0000 ....0...0.......
}
}
}
}
“alis”类型已被新的 Snow Leopard“书签”类型取代。我如何修改此代码以便:
a) 测试并处理新的“bmrk”类型,即获取文件的绝对路径
b) 继续致力于 Tiger 和 Leopard
?
或者我可以通过某种方式告诉操作系统我仍然想要包含“alis”结构的 odoc 事件?
最佳答案
这里包含的“书签数据”可以使用 Snow Leopard 中引入的一些新的 CFURL 和/或 NSURL API 进行处理。 +[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error]是 NSURL API,可用于解析事件描述符中包含的书签数据。
您还可以使用 coerceToDescriptorType:
方法将描述符强制为别名并以这种方式处理它,尽管 Snow Leopard 是否包含内置的强制处理程序没有记录这(看起来确实应该如此)。
对于 Tiger/Leopard 兼容性,您永远不会在这两个系统上传递书签数据,因此调用新的 NSURL 方法应该不成问题,因为该代码路径永远不会在较旧的系统。
顺便说一句,头文件“AEDataModel.h”包含您正在使用的四个字符代码的符号常量,因此您可以使用 typeAlias
而不是 'alis'
、 typeBookmark
而不是 'bmrk'
等等。这往往会使代码更具可读性,并让编译器保护您免受打字错误等问题的影响。
关于cocoa - 在 Snow Leopard 中处理 "Open Document"(odoc) 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1446835/
我使用 NSImageViews 的动画代理代理对其进行动画处理。在 Snow Leopard 上测试我的应用程序时,一切都按预期进行。然而,在 Leopard 上,所有动画都不起作用。此外,无论是否
我想知道创建一个上下文菜单项的最佳实践是什么,该菜单项可以在 leopard 和 Snow leopard 中工作,并与选择的文件和/或文件夹一起使用,将它们发送到 shellscript。 我知道上
我在 Snow Leopard 中开发了一个简单的应用程序。在 Snow Leopard 中编译的构建配置为:(10.5 | Release | i386)。 当我尝试使用上述配置编译它时,它在应用程
背景 我是一名正在为 Mac 构建应用程序的开发人员。我即将接触 Snow Leopard。到目前为止,我一直在 Leopard 上构建。我只做了大约一年的 Cocoa 开发,不是很认真。 我读了很多
我打开 ScriptEditor,点击 Record,点击文档中的一些图标,打开 System Preferences,然后点击 ScriptEditor 中的 stop 并且没有任何 react ,
有没有办法让文本位于鼠标光标下? 我正在尝试构建一个字典应用程序,当鼠标悬停在单词上时会弹出一个翻译面板。 我查看了accessibility api,它只能找到当前的ui元素,但不能找到当前的单词.
我当前正在使用 NSRunAlertPanel 来显示对话框。 它在 Leopard 和 Snow Leopard 中完美运行。在 Tiger 中,除了图标之外它也有效。 在 Leopard 和 Sn
我正在开发一个 Cocoa 应用程序,并且 NSToolbar 的外观得到了不同的结果。 我用于主窗口。 具体来说,我使用搜索字段作为最后一个 NSToolbarItem 并且,在 Snow Leop
我有基于 RubyCocoa 0.13.2 的应用程序。它适用于 10.5.8 及更早版本。当我尝试在 10.6 上运行它时,它在无限循环中崩溃。 10.6 内置了 0.13.2,但它与 10.5 的
我目前正在使我的 PyObjC 应用程序适用于 Snow Leopard,并且我成功地编译了一个独立的应用程序。我的问题是,鉴于这些错误,我如何使构建也与 Leopard 兼容? dyld: lazy
到目前为止,所有 Mac App Store 开发人员都知道所有应用程序都必须启用新的 OSX Lion Sandboxing。对于现有的应用程序,我们必须在 XCode 4.2 中启用它并设置数据迁
一切都在 10.5 上运行,但现在我的 PackageMaker 安装项目坏了。几天来我一直在与一个问题作斗争,要么 Snow Leopard (OS X 10.6.1) 破坏了 PackageMak
只是想知道是否有人成功地做到了这一点,以及使其发挥作用的步骤是什么。 提前致谢。 最佳答案 GrowlSafari 使用 mach_inject .. 它可以工作.. 我尝试过逆向工程,但我不明白为什
这是对 Controlling volume of running applications in Mac OS X via Objective-C 的跟进,其中解释了如何为 10.5 或更早版本设置
我在 Lion 上开发了一个 Cocoa 应用程序,现在我想添加与 Leopard 和 Snow Leopard 的兼容性。 我尝试将开发目标设置为 10.5,但在 Leopard 和 Snow Le
我正在尝试在 10.5 上部署一个在 Xcode 3.2.X (Snow Leopard) 上开发的 PyObjC(或 Cocoa-Python)应用程序,该应用程序在 10.6 系统上运行良好。 应
我刚刚在系统上安装了 Ubuntu 10.10 桌面以进行一些开发工作。我想在我的 MacBook 上运行 X 服务器环境而不是键盘跳动(Ubuntu 机器上的图形系统不是很好)。 在网上四处闲逛,我
我正在尝试在 Max OS-X 上使用 C++0x 和 Ogre 移植一个 C++ 项目,但我遇到了 OS-X 版本之间的可移植性问题。 我成功地使用 GCC 4.6.0 在 Mac OS-X 10.
较早的帖子提到,如果您以已注册的iOS开发人员身份登录,则https://developer.apple.com/downloads/index.action?name=Xcode的Xcode下载中列
我想更改 dmg 的默认图标,我喜欢使用默认图像音量图标的 Skype 或 Dropbox,但我无法通过查找器找到它。你知道我在哪里可以找到它吗? 感谢您的回答, 鲍里斯 最佳答案 好的,我在查找器中
我是一名优秀的程序员,十分优秀!