Cocoa 请帮我看一下苹果活动巫毒?

Cocoa 请帮我看一下苹果活动巫毒?,cocoa,appleevents,Cocoa,Appleevents,我正在开发一个简单的小文本编辑器,它实现了Apple事件ODBeditor套件的编辑器部分,这样我的应用程序就可以使用QuickCursor来提供编辑功能。需要发送的事件非常简单,并且共享许多相同的代码,因此我将其打包成如下方法: -(BOOL)postODBEditorAppleEvent:(OSType)type withOldLocation:(NSString *)oldPath newLocation:(NSStri

我正在开发一个简单的小文本编辑器,它实现了Apple事件ODBeditor套件的编辑器部分,这样我的应用程序就可以使用QuickCursor来提供编辑功能。需要发送的事件非常简单,并且共享许多相同的代码,因此我将其打包成如下方法:

-(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调试,我确认Apple事件正在发送,并且据我所知,directObject描述符包含适当的数据。但是,在QuickCursor方面,我继续看到类似于5/17/10 12:41:15 PM QuickCursor[177]获得未知文件的ODB编辑器事件的消息。在Console.app中。我已经从源代码构建了QuickCursor,并且能够确定它没有从directObject描述符获得正确的路径


所以,我不知道该怎么做才能超越这一点,因为NSAppleEventDescriptor的东西对我来说是相当陌生的,而且有点老派的灰胡子诡计的味道:-p但我希望听到的人会更精通这些咒语,也许会指出我做错了什么。提前感谢。

我不知道为什么,但使用[NSAppleEventDescriptor descriptor descriptor with string:oldPath]效果很好。现在就开始使用它,然后继续调试其他项目。也许这对其他人有帮助