2010-05-17 2 views
0

저는 Apple Events의 ODBEditorSuite 편집기 부분을 구현하는 간단한 텍스트 편집기로 작업하므로 내 응용 프로그램이 QuickCursor로 편집 기능을 제공 할 수 있습니다. 전송해야 할 이벤트가 매우 간단하며, 같은 코드를 많이 공유, 그래서 이런 방법으로 그것을 싸서했습니다 NSLog() 디버깅을 사용하여ODBEditorSuite Apple Help 부두로 도움을 주시겠습니까?

-(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; 
} 

, 내가 확인했습니다 그 Apple Event가 보내고 있으며 directObject 디스크립터에 적절한 데이터가 있음을 알릴 수 있습니다. 그러나 Quick Cursor 측면에서는 Console.app에 5/17/10 12:41:15 PM QuickCursor[177] Got ODB editor event for unknown file.과 같은 메시지가 계속 표시됩니다. 내가 소스에서 QuickCursor를 구축하고 그것이 directObject 설명자에서 적절한 경로를 얻지 못하고 있는지 확인할 수있었습니다.

그래, NSAppleEventDescriptor 물건이 나에게는 꽤 외국이고 옛날 학교 회색 턱수염 속임수의 채찍이있다 :-P 그러나 나는 누군가가 듣기를 원한다는 말을 듣기를 원한다. 어쩌면 내가 잘못하고있는 것을 지적 할 수 있습니다. 미리 감사드립니다.

답변

0

이유는 모르지만 [NSAppleEventDescriptor descriptorWithString:oldPath]을 사용하면 정상적으로 작동합니다. 지금 사용하고 다른 항목을 디버깅하는 단계로 넘어갔습니다. 아마 이것은 다른 누군가를 도울 것입니다.

관련 문제