문제

Cocoa는 CS3에서 작업했습니다 메인 카본 플러그인 번들 안에 코코아 번들을 넣는 트릭, 탄소에서로드하고 nsapplicationload ()를 발행합니다. Photoshop CS3는 탄소 전용이며 플러그인 번들을 내리는 데 사용 되었기 때문입니다.

Photoshop CS4는 Cocoa를 사용하며 메인 스레드에 자체 Nsautorelease 풀이 있습니다.

Photoshop CS4에서 NSWINDOWCONTROLLER에 의해로드 된 매우 간단한 창 기반 XIBS/NIBS는 상자에서 작업합니다.

그러나 창의 컨트롤에 바인딩을 추가하면 창을 닫을 때 또는 플러그인을 두 번째로 사용하거나 포토샵 자체를 닫을 때 선택적으로 재미있는 충돌이 발생합니다.

고급 코코아 기능을 사용할 때까지 모든 것이 잘 작동하는 이유는 무엇입니까? 나는 붙어있다.

편집하다: 나는 "Photoshop CS3/CS4 플러그인에서 코코아를 사용하는 방법"에 대한 더 넓은 문제에 대한 해결책을 실제로 발견했습니다. 아래를 참조하십시오.

도움이 되었습니까?

해결책

새로운 것을 만들어야합니다 로드 가능한 번들 펜촉과 코코아 코드가 포함 된 대상. 번들 제품을 번들 자원을 복사하십시오 플러그인의 단계. 그런 다음 일부 컨트롤이있는 코코아 창을로드하는 필터 플러그인 코드는 다음과 같습니다.

Boolean DoUI (void) {

    // Create the CF Cocoa bundle
    CFBundleRef pluginBundle;
    CFURLRef cocoaBundleURL;
    pluginBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.example.plugin"));
    cocoaBundleURL = CFBundleCopyResourceURL(pluginBundle, 
                                             CFSTR("Cocoa_bundle"), 
                                             CFSTR("bundle"), 
                                             NULL);
    CFBundleRef cocoaBundleRef;
    cocoaBundleRef = CFBundleCreate(kCFAllocatorDefault, cocoaBundleURL);
    CFRelease(cocoaBundleURL);

    // start Cocoa (for CS3)
    NSApplicationLoad(); 

    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    // load the cocoa bundle by identifier
    NSBundle* cocoaBundle;
    cocoaBundle = [NSBundle bundleWithIdentifier:@"com.example.plugin.cocoa"];

    // load the window controller from the bundle
    Class testControllerClass;
    testControllerClass = [cocoaBundle classNamed:@"MyWindowController"];

    MyWindowController* winController = [[testControllerClass alloc] init];
    [NSApp runModalForWindow:[winController window]];
    [[winController window] performClose:nil];
    [winController release];

    // release the bundle
    CFRelease(cocoaBundleRef);

    [pool release];

    return 1;
}

이것은 Craig Hockenberry를 기반으로합니다 번들 트릭. 아직 테스트하고 있지만 CS3 및 CS4 모두에서 작동해야합니다.

다른 팁

방금 CS4 용 코코아 기반 플러그인을 작성하기 시작했습니다. 실제로,이 주제에 대한 정보는 거의 없으며, 내가 갈 때 그것을 알아 내고 있습니다.

  • 이 Apple 예제에서 시작하여 전체 프로젝트를 다운로드하십시오. 텍스트에는 몇 가지 작은 세부 정보가 없으므로 다음과 같습니다.

탄소/코코아

  • Photoshop SDK 예 중 하나를 선택하고 (ColormUnger를 사용했습니다) 시작하기 위해 간단하게 유지하므로 Apple 예제를 템플릿으로 사용하여 "정보"대화 상자를 교체하십시오. 메모리 문제없이 작업을 수행 한 후에는 길을 가야합니다.

나는 10 년 동안 Java와 Ruby 프로그래머 였으므로 C/C ++ Foo는 녹슬었고, 나는 단지 목표 C를 배우고 있습니다. 두 개의 "gotchas"는 만일을 대비하여 만났습니다 ....

  • NIB/XIB 파일에서 컨트롤러 개체를 작성하지 마십시오. Apple 예제를 기반으로 컨트롤러는 INIT Method에서 NIB 파일을 열고 정말 흥미로운 재귀 루프를 얻을 수 있기 때문입니다.
  • Apple 예제는 탄소 기반 C 앱에 코코아 물건을 포함시키는 것입니다. Adobe 예제는 모두 C ++입니다. 헤더 파일에서 extern "c"{}를 잊지 마십시오.

CS2는 PowerPC Mach-O 코드를 CS3/CS4만큼 쉽게로드합니다. CS2 에서이 코코아 접근 방식을 테스트 한 사람이 있습니까?

현재 나는 플러그인 하중의 모든 곳에서 작동하도록 보장되므로 CS2/CS3/CS4 용 탄소를 사용합니다. 그리고 CS5의 코코아는 물론 32 또는 64 비트이든간에.

Chris Cox는 CS5 이외의 다른 작업에서 코코아에 대해 낙관적이지 않습니다.http://forums.adobe.com/message/325655 5#3256555

그렇다면 여기서 진짜 거래는 무엇입니까? 말의 입에서 조언을 무시하는 것은 매우 어렵습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top