当前位置: 首页 > 面试题库 >

从整数ID获取pyobjc对象

西门嘉澍
2023-03-14
问题内容

有没有一种方法可以获取Objective-C对象的PyObjC代理对象,仅将其id作为整数?没有扩展模块可以完成吗?

就我而言,我试图从返回wx.Frame.GetHandle(使用wxMac和Cocoa)中获取一个Cocoa代理对象。


问题答案:

我确实找到的一种解决方案依赖于ctypes从创建一个objc_object对象id

import ctypes, objc
_objc = ctypes.PyDLL(objc._objc.__file__)

# PyObject *PyObjCObject_New(id objc_object, int flags, int retain)
_objc.PyObjCObject_New.restype = ctypes.py_object
_objc.PyObjCObject_New.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int]

def objc_object(id):
    return _objc.PyObjCObject_New(id, 0, 1)

用于打印的示例wx.Frame

import wx

class Frame(wx.Frame):
    def __init__(self, title):
        wx.Frame.__init__(self, None, title=title, pos=(150,150), size=(350,200))

        m_print = wx.Button(self, label="Print")
        m_print.Bind(wx.EVT_BUTTON, self.OnPrint)

    def OnPrint(self, event):
        topobj = objc_object(top.GetHandle())
        topobj.print_(None)

app = wx.App()
top = Frame(title="ObjC Test")
top.Show()

app.MainLoop()

因为使用,所以有点讨厌ctypes。如果有pyobjc我忽略的API函数或其他更巧妙的方法,我肯定会感兴趣。



 类似资料:
  • 问题内容: 我遇到一些与parse.com相关的问题,我想获取特定对象的数据…我已经使用以下代码来获取数据,但似乎已被贬值。 我使用以下代码来获取数据形式的objectId: 这里“ U8mCwTHOaC”是我的objectId,我想获取此objectId的行。谢谢。 问题答案: 如果要从用户表中获取数据。 如果要当前用户的行

  • 在React/FireStore应用程序上工作,尝试将Id-s放回objects数组中。代码如下: 知道'_zipobject'行有什么问题吗?

  • 问题内容: 如果知道与该线程关联的ID,该如何获取正在运行的线程的引用? 例如 问题答案: 您有2种方法可以做到。两者都很简单: 旧方法:获取您可以循环访问..getParent()的根线程组。并打电话 较新(但速度较慢)。 第一种方法有一个小问题,由于存在错误,ThreadGroup可能根本无法枚举任何东西。 第二个比较慢,但是有安全漏洞。

  • 问题内容: 我有一个JSON文件,其中包含一些我想在AngularJS网站上访问的数据。现在,我要从数组中仅获取一个对象。因此,我想例如ID为1的商品。 数据如下所示: 我想使用AngularJS $ http功能加载数据,如下所示: 这正在工作。但是,现在如何从获取的数组中获取特定的数据对象(按ID)呢? 在此先感谢您的帮助。 马克·马克 问题答案: 唯一的方法就是遍历数组。显然,如果您确定结果

  • PyObjC 旨在为 Python 和 Objective-C 两种语言之间提供交互的接口。Python 语言可以通过PyObjC来使用已有的Objective-C的代码,反过来Objective-C也可以利用Python语言的一些功能。 PyObjC最主要的用处是在 Mac OS X 系统下使用纯Python语言来开发 Cocoa GUI 应用程序。  示例代码: class MyClass(N

  • 如何从对象获取数组?我试图进入空数组,这样我就可以验证它的空状态。 输出