2011-01-22 9 views
1

この問題は私の生産性を低下させているので、誰かが私を助けてくれることを願っています。 Mac開発にはかなり新しいです。Carbon Objective C++アプリケーションでCocoaデリゲートを使用

フィーチャーを追加したいCarbonアプリケーションがあります。 ファインダーでダブルクリックしたファイルのパスを取得します。

私は

  • を持ってはObjective Cの呼び出しを許可するプロジェクトを変更しました。
  • デリゲートオブジェクトをセットアップしてNSApp
  • - (BOOL)application:(NSApplication *)app openFile:(NSString *)filename デリゲートに実装しました。

問題:ファインダーでファイルをダブルクリックすると、デリゲートメソッドがヒットしません。

私は誰かが私はそれを聞いて嬉しくなるヒントを持っている場合、私は今のRunApplicationEventLoopを使って何か(メモリ/スコープの問題?イベントループの問題()

をしないのです確信しています。

はあなたのすべてをありがとう

答えて

1

Carbonアプリケーションでは、NSAppはNSApplicationMain関数で定義されていますが、NSApplicationMain関数で定義されています.NASAppは、Cocoaアプリケーションを開始するために呼び出されます。イベントハンドラをインストールし、 'odoc'リンゴイベントを待ち受けます。

+0

ご回答ありがとうございます。 イベントハンドラは実際には私の最初のアプローチでしたが、アプリケーションがまだインストールされていない場合は機能しません。 アプリケーションが既に起動しているときは、完全に動作します。 次の行を使用しました。 AEInstallEventHandler(kCoreEventClass、 'odoc' \t \t \t \t \t \t \t \t \t AEEventHandlerUPP(HandleOpenDocuments)、0L、偽)。 まだ何か不足していますか? – user585299

+0

ハンドラをどこにインストールしていますか?あなたがそれをキャッチする前にそれが終わるかもしれない? Appleの起動サービスのドキュメントには、以前にアプリケーションが開かれていない場合でもイベントを受け取る必要があることが記載されています(http://developer.apple.com/library/mac/#documentation/Carbon/Conceptual/LaunchServicesConcepts/LSCConcepts/LSCConcepts.html%23 // apple_ref/doc/uid/TP30000999-CH202-TP9)。 – ughoavgfhw

+0

main関数の最初の行にハンドラをインストールします。 問題は解決されました。 RunApplicationEventLoopを呼び出す前に、使用していたSDKの1つがダイアログボックスをデバッグでポップしました。この問題はリリースでは発生しません(ダイアログボックスは表示されません)。私は、このダイアログボックスを表示するために使用されたメカニズムが、実際にアプリケーションが起動していないときになぜ機能しないのかを説明するodocイベントを "食べる"と仮定します。 ありがとうございます。 – user585299

関連する問題