0

私は、Apple Events の ODBEditorSuite のエディター部分を実装する単純な小さなテキスト エディターに取り組んでおり、アプリが 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 Event が送信されていること、および directObject 記述子に適切なデータが含まれていることを確認できました。5/17/10 12:41:15 PM QuickCursor[177] Got ODB editor event for unknown file.しかし、クイック カーソル側では、Console.appのようなメッセージが引き続き表示されます。ソースから QuickCursor をビルドしましたが、directObject 記述子から適切なパスを取得していないことを確認できました。

だから、私はこれを超えてどこに行くべきかわかりません。NSAppleEventDescriptor物事は私にとって非常に異質であり、古い学校の灰色のひげのチカニーを叩きます :-P私は間違っている。前もって感謝します。

4

1 に答える 1

0

理由はわかりませんが、使用[NSAppleEventDescriptor descriptorWithString:oldPath]は問題なく機能しました。今それを使用して、他のアイテムのデバッグに移りました。多分これは他の誰かを助けます。

于 2010-05-17T18:36:44.690 に答える