首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请帮助与ODBEditorSuite苹果事件伏都教?

请帮助与ODBEditorSuite苹果事件伏都教?
EN

Stack Overflow用户
提问于 2010-05-18 01:47:32
回答 1查看 182关注 0票数 0

我正在开发一个简单的小文本编辑器,它实现了苹果事件ODBEditorSuite的编辑器部分,这样我的应用程序就可以与QuickCursor一起工作,提供编辑功能。需要发送的事件非常简单,并且共享了许多相同的代码,所以我将其封装成如下所示的方法:

代码语言:javascript
复制
-(BOOL)postODBEditorAppleEvent:(OSType)type 
               withOldLocation:(NSString *)oldPath
                   newLocation:(NSString *)newPath
{
    NSData *targetBundleID = [@"com.hogbaysoftware.QuickCursor" dataUsingEncoding:NSUTF8StringEncoding];
    NSAppleEventDescriptor *targetDescriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeApplicationBundleID data:targetBundleID];

    NSAppleEventDescriptor *appleEvent = [NSAppleEventDescriptor appleEventWithEventClass:kODBEditorSuite eventID:type targetDescriptor:targetDescriptor returnID:kAutoGenerateReturnID transactionID:kAnyTransactionID];

    NSAppleEventDescriptor *directObjectDescriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeFSRef data:[oldPath dataUsingEncoding:NSUTF8StringEncoding]];
    [appleEvent setParamDescriptor:directObjectDescriptor forKeyword:keyDirectObject];

    if(newPath != nil){
        NSAppleEventDescriptor *newLocationDescriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeFSRef data:[newPath dataUsingEncoding:NSUTF8StringEncoding]];
        [appleEvent setParamDescriptor:newLocationDescriptor forKeyword:keyNewLocation];
    }
    if(self.senderToken != nil){
        NSAppleEventDescriptor *tokenDescriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeWildCard data:self.senderToken];
        [appleEvent setParamDescriptor:tokenDescriptor forKeyword:keySenderToken];
    }
    if (self.customPath != nil){
        NSData *customPathData = self.customPath;
        NSAppleEventDescriptor *customPathDescriptor = [NSAppleEventDescriptor descriptorWithDescriptorType:typeUnicodeText data:customPathData];
        [appleEvent setParamDescriptor:customPathDescriptor forKeyword:keyFileCustomPath];
    }   
    AEDesc reply = {typeNull, NULL};                                                        
    OSStatus status = noErr;
    status = AESend([appleEvent aeDesc], &reply, kAEWaitReply, kAENormalPriority, kAEDefaultTimeout, NULL, NULL);
    return status == noErr;
}

通过使用NSLog()调试,我已经确认苹果事件正在发送,并且据我所知,directObject描述符包含适当的数据。但是,在快速光标方面,我继续看到像Console.app中的5/17/10 12:41:15 PM QuickCursor[177] Got ODB editor event for unknown file.这样的消息。我已经从源代码构建了QuickCursor,并且能够确定它没有从directObject描述符中获得正确的路径。

所以,我不知道还能做什么,因为NSAppleEventDescriptor的东西对我来说很陌生,有点老派的胡须诡计的味道:-P但我希望有人能更好地精通这样的咒语,也许能指出我做错了什么。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2010-05-18 02:36:45

我不知道为什么,但使用[NSAppleEventDescriptor descriptorWithString:oldPath]工作得很好。现在正在使用它,并且已经转移到调试其他项目。也许这对其他人有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2851398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档