objc.signature在哪里记录?

时间:2015-11-06 06:21:09

标签: pyobjc

我正在尝试为NSWebView实现委托,但是当我运行它时,我收到此错误:

TypeError: Error when calling the metaclass bases
    class Delegate does not correctly implement protocol WebScripting: the signature for method isSelectorExcludedFromWebScript: is c@:: instead of Z@::

我在哪里可以找到'c @ ::'的文档,而不是'Z @ ::',以及我的代码可能有什么问题?

有问题的方法如下:

def isSelectorExcludedFromWebScript_(self, sel):
    return True

具体来说,NSWebView记录在:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/index.html(但我怀疑Apple将来会移动此URL)

更确切地说,我试图使用的代表非正式协议在此处记录:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/WebKit/Protocols/WebFrameLoadDelegate_Protocol/index.html#//apple_ref/doc/uid/TP40003828https://developer.apple.com/library/mac/documentation/Cocoa/Reference/WebKit/Protocols/WebScripting_Protocol/index.html#//apple_ref/doc/uid/TP40001562

我找到的唯一objc.signature文档位于:http://pythonhosted.org/pyobjc/api/module-objc.html

1 个答案:

答案 0 :(得分:2)

标准的目标-c类型编码记录在Apple's ObjC runtime reference中。这将c定义为char,将@定义为对象,将:定义为选择器,但不提及Z

PyObjc添加了一些不在该列表中的内容,在http://pythonhosted.org/pyobjc/api/module-objc.html#objective-c-type-strings中通过引用objc模块中的一堆常量进行了描述。 objc._C_NSBOOL的值为Z(也在pyobjc BridgeSupport docs中提及)

所以看起来问题与Python的True到正确的目标c类型的转换有关,但我不确定如何纠正这个问题。