我正在尝试为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/TP40003828和https://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
答案 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类型的转换有关,但我不确定如何纠正这个问题。