1

当我使用 PyObjC 时,带有 PyDev 的 Eclipse 不会向我显示正确的代码完成。我用谷歌搜索了这个问题,并在这篇文章中找到了原因。这篇文章说 PyDev 无法读取 bridge-support 文件中的信息,这就是这个问题的原因。

我知道这个问题可以通过编写预定义的完成来解决。但是 PyObjC 中有大量的类/方法。例如,AppKit模块本身包含230393 个类,AppKit.NSWindow其中包含26991 个方法。(我在 PyDev 中使用interpreterinfo.pyand来计算它们)pycompletion.py

有没有什么通用的方法可以生成大量 PyDev 的 pledefined 完成脚本?或者当我使用 PyObjC 时有什么方法可以正确完成?


添加于 2013/03/12 07:56(JST)

我在PyDev 中添加objc, Foundation, AppKit,Cocoa等等。Force Builtin现在 PyDev 向我展示了比以前更多的建议。alloc()但是 PyDev在 PyObjC 的类中找不到方法。通常情况下,我们初始化 NSWindow 如下:

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

所以我想alloc()在我输入后作为完成候选人window = NSWindow.

第一个问题alloc是 PyDev(和其他 IDE,如 PyCharm)在任何 pyobjc 的类上都找不到方法。我试图alloc通过使用交互式 shell 来查找方法,但我也找不到。

第二个问题是,由于第一个问题,当我创建 NSWindow 实例(或 PyObjC 中的任何实例)时,PyDev 无法分析变量的类型。所以 PyDevinitWithContentRect_styleMask_backing_defer_在我输入window = NSWindow.alloc()..

如果您知道解决此类问题的方法,请告诉我。

4

1 回答 1

2

解析 bridgesupport 文件不是一个解决方案,它们只包含 PyObjC 公开的方法和类定义的一小部分(大部分信息是从 Objective-C 运行时提取的)。

我自己不使用 PyDev,也不知道它使用什么文件格式来完成,通过dir()objc.getClassList().

显然,一种解决方法是告诉 PyDev 将您使用的 PyObjC 模块视为内置模块:PyDev FAQ

于 2013-03-11T08:50:47.933 回答