Frage

Cocoa verwendet auf CS3 mit dem Trick von rel="nofollow Kakao Bündel im Inneren des Hauptkohlenstoff Plugin Bündel Einlochen, aus Kohlenstoffbeladung und eine Ausgabe von NSApplicationLoad (). Das ist, weil Photoshop CS3 war Kohlenstoff-only und verwendet, um das Plugin-Bundles zu entladen.

Photoshop CS4 nutzt Cocoa und verfügt über einen eigenen NSAutorelease Pool an seinem Platz auf dem Haupt-Thread.

Auf Photoshop CS4 sehr einfache Fenster-basierten xibs / Nibs von einem NSWindowController geladen heraus arbeitet die Box.

Aber fügen Sie einfach eine Bindung an eine Steuerung auf dem Fenster und Sie werden lustige Abstürze erhalten, gegebenenfalls, wenn Sie das Fenster schließen, oder das zweite Mal, verwenden Sie das Plugin, oder auch beim Schließen Photoshop selbst.

Warum alles scheint gut zu funktionieren, bis ich einige erweiterte Cocoa Funktionen nutzen? Ich bin fest.

Bearbeiten : Ich habe mir wirklich die Lösung für das Problem gefunden breiteren "Wie Kakao zu verwenden, in einer Photoshop CS3 / CS4 Plugin?". Siehe unten.

War es hilfreich?

Lösung

Sie haben ein neues Belastbar Bundle Ziel erstellen, die Ihre Nibs und Ihre Cocoa-Code enthält. Fügen Sie das Bundle Produkt der Copy Bundle Ressourcen Phase Ihres Plugins. Dann wird der Code für einen Filter-Plugin, das ein Cocoa-Fenster mit einigen Kontrollen lädt wäre:

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

Dieses basiert auf dem Craig Hockenberry Bündel Trick . Ich teste es immer noch, aber es sollte sowohl auf CS3 und CS4.

Andere Tipps

Ich habe gerade angefangen arbeitet an einem Cocoa-basierte Plug-in für CS4 zu schreiben. Wirklich, es gibt so gut wie keine Informationen da draußen zu diesem Thema, und ich habe es, herauszufinden, wie ich gehe.

  • Starten Sie von diesem Apple-Beispiel, und stellen Sie sicher, dass Sie das gesamte Projekt herunterladen, weil es ein paar kleine Details fehlen aus dem Text sind:

Kohle / Cocoa

  • Wählen Sie eine der Photoshop SDK Beispiele (I ColorMunger verwendet wird), und halten Sie es einfach, zu beginnen, damit nur versuchen, die „Über“ -Dialog zu ersetzen, das Apple-Beispiel als Vorlage verwenden. Sobald Sie, dass ohne Speicherprobleme arbeiten, sollten Sie auf Ihrem Weg.

Ich habe seit 10 Jahren ein Java und Ruby-Programmierer, so dass mein C / C ++ foo ist rostig, und ich lerne gerade Objective C, wie ich gehen. Zwei „Fallstricke“ Ich lief in, nur für den Fall ....

  • Erstellen Sie keine Controller-Objekt in Ihrer NIB / XIB-Datei. Denn auf der Grundlage dieses Apple-Beispiel der Controller darin die NIB-Datei öffnet ist init-Methode, und Sie erhalten eine wirklich interessante Rekursionsschleife
  • Das Apple Beispiel ist das Einbetten der Cocoa Sachen in einem Kohlenstoff-basierten C App. Die Adobe Beispiele sind alle C ++. Vergessen Sie nicht, Ihre extern "C" {} in der Header-Datei.

CS2 lädt PowerPC Mach-O-Code so leicht wie CS3 / CS4. Hat jemand diesen Cocoa Ansatz in CS2 getestet?

Zur Zeit verwende ich Carbon für CS2 / CS3 / CS4 wie dies gewährleistet ist überall die Plugin-Lasten arbeiten; und Kakao für CS5 natürlich, ob 32 oder 64 Bit.

Chris Cox ist nicht optimistisch, was Cocoa in etwas anderes als CS5 arbeiten: http://forums.adobe.com/message/3256555#3256555

Also, was ist die eigentliche Behandlung hier? Es ist ziemlich schwer Rat von dem Maul des Pferdes zu ignorieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top