【问题标题】:Where is objc.signature documented?objc.signature 记录在哪里?
【发布时间】:2015-11-06 06:21:08
【问题描述】:

我正在尝试为 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(但我怀疑苹果将来会移动这个 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

【问题讨论】:

  • 顺便说一句,我确实阅读了pseudofish.com/showing-a-nssavepanel-as-a-sheet.html,但是,似乎指向苹果开发文档的每个链接都已损坏。为苹果感到羞耻。
  • 我可以去 here 并搜索 NSSavePanel。但是,NSWebView 没有返回任何结果,objc.signature 也没有,isSelectorExcludedFromWebScript 也没有。糟糕的搜索算法、不完整的文档或 API 发生了重大变化。
  • @BaconBits:我现在已经在问题中提供了明确的参考 - 谢谢。 :)

标签: pyobjc


【解决方案1】:

标准的objective-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 类型有关,但我不确定如何解决该问题。

【讨论】:

  • 这是一个有见地的回应。我试图指定选择器签名,但我似乎无法正确执行此操作。我不确定#type-encodings 部分是否描述了签名类型,因为它没有提到'c'。但是,我想知道它是否与作为 class 方法而不是实例方法的特定方法有关。
  • pythonhosted.org/pyobjc/api/… 有另一个参考资料,它根据objc 模块中定义的常量来描述这些字符串。 objc._C_BOOL 是 c 和 objc._C_NSBOOL 是 Z。
  • 这实际上开始变得有意义了,我没想到要查看这些常量的值。我希望弄清楚如何解决我遇到的问题,但就目前而言,看起来你可能会赢得赏金。 :)(特别是如果您将涉及 objc._C_NSBOOL 的评论正确地放入答案中)
  • 我认为这可能是在这种情况下可以预期的最佳答案 - pyobjc、objc 和苹果的文档就是它们的样子。
猜你喜欢
  • 2018-03-27
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2017-05-20
  • 2015-08-28
  • 1970-01-01
相关资源
最近更新 更多