你如何使用respondsToSelector& PyObjc中的performSelector

时间:2014-02-04 00:50:24

标签: python objective-c pyobjc

我正在将Objective-C程序转换为PyObjC并缺乏两者的经验。

这是Objective-C部分

WebPreferences *p = [webview preferences];
if([p respondsToSelector:@selector(setWebGLEnabled:)]){
[p performSelector:@selector(setWebGLEnabled:) withObject:[NSNumber numberWithBool:YES]];
}

这基本上是一个未记录的方法(是的,我知道我无法提交到app store)以在WebView中启用WebGL

我无法弄清楚如何将此部分翻译成PyObjC

2 个答案:

答案 0 :(得分:1)

您不必使用performSelector,只需调用方法:

p = webview.preferences()
p.setWebGLEnabled_(True)

这是有效的,因为PyObjC不会查看头文件,而是在Objective-C运行时查找哪些方法。

答案 1 :(得分:0)

这座桥的神奇之处。你可以只使用选择器的字符串 - 方法名称(带冒号,而不是下划线):

>>> from AppKit import *
>>> s = NSString.stringWithString_("Lemon curry?")
>>> s.respondsToSelector_("length")
True
>>> s.respondsToSelector_("count")
False
>>> s.respondsToSelector_("writeToFile:atomically:encoding:error:")
True
>>> s.performSelector_("lowercaseString")
u'lemon curry?'