1

PyObjC を使用している場合、Eclipse with PyDev で正しいコード補完が表示されません。私はこの問題についてグーグルで検索し、この記事で理由を見つけました。この記事では、PyDev が bridge-support ファイルの情報を読み取ることができないと述べており、それがこの問題の原因です。

この問題は、定義済みの補完を記述することで解決できることを知っています。しかし、PyObjC にはたくさんのクラス/メソッドがあります。たとえば、AppKitモジュールには230393 個のクラスが含まれており、 26991 個のメソッドが含まれていますAppKit.NSWindow。(私は PyDev でandを使用してそれらを数えます)interpreterinfo.pypycompletion.py

PyDev の事前定義された完了スクリプトを多数生成する一般的な方法はありますか? または、PyObjC を使用しているときに正しい補完を取得する方法はありますか?


2013/03/12 07:56(JST)追記

objcFoundationAppKitCocoaなどForce Builtinを PyDevに追加します。これで、PyDev は以前よりも多くの提案を完成させてくれます。しかし、PyDev はalloc()PyObjC のクラスでメソッドを見つけることができません。一般的なケースでは、以下のように NSWindow を初期化します。

from Foundation import *
from AppKit import *
    :
    :
window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(
        rect,
        style_mask,
        backing,
        flag)

だから私alloc()はタイプした後に補完候補として欲しいwindow = NSWindow..

最初の問題は、PyDev (および PyCharm などの他の IDE) がallocpyobjc のクラスでメソッドを見つけられないことです。インタラクティブシェルを使ってメソッドを見つけようとしましallocたが、それも見つかりませんでした。

2番目の問題は、最初の問題の結果として、NSWindow(またはPyObjCのいずれか)のインスタンスを作成するときに、PyDevが変数の型を分析できないことです。initWithContentRect_styleMask_backing_defer_そのため、入力した後、PyDev は提案できませんwindow = NSWindow.alloc().

このような問題を解決する方法をご存知でしたら教えてください。

4

1 に答える 1

2

ブリッジサポートファイルの解析は解決策ではありません。これらのファイルには、PyObjCによって公開されるメソッドとクラス定義の小さなサブセットしか含まれていません(ほとんどの情報はObjective-Cランタイムから抽出されます)。

私自身はPyDevを使用しておらず、補完に使用するファイル形式もわかりません。dir()のすべてのクラスで使用することで、これらのファイルを簡単に作成できる可能性がありますobjc.getClassList()

明らかに、これに対する1つの回避策は、使用するPyObjCモジュールを組み込みモジュールとして扱うようにPyDevに指示することです。PyDevFAQ

于 2013-03-11T08:50:47.933 に答える