macOS - 自定义框架中的对象引发无法识别的选择器错误

Posted

技术标签:

【中文标题】macOS - 自定义框架中的对象引发无法识别的选择器错误【英文标题】:macOS - Objects in Custom Framework throwing unrecognized selector error 【发布时间】:2019-03-01 19:05:19 【问题描述】:

我是第一次创建自定义框架,我打算在插件中使用它。由于它不是一个应用程序,我不能简单地将我的自定义框架拖到应用程序目标的 Embedded Binaries 部分。从不同的教程中收集,我执行了以下步骤:

    在插件目标的构建阶段创建了额外的副本文件条目,将我的框架添加到我的产品的 ./Frameworks 路径中。 在目标的 Linked Binary with Libraries 部分添加了框架 在构建设置的目标框架搜索路径中添加了条目

从那里,我的插件的 XCode 项目能够成功引用我在自定义框架中定义的类,并在其各自的主机应用程序中运行时实例化对象。然而,在实例化我在框架中定义的子类 NSViewController 之一时,当我尝试调用它的一种方法时,它很快就崩溃了。根据控制台,原因是unrecognized selector sent to instance <memory_address> abort() called,其中有问题的选择器是我调用的setter 方法。

我之前在我的插件项目中使用并定义了子类 NSViewControllers,只是不是来自框架。我不确定我的插件项目的框架设置是否是问题,或者是一些 nib 加载异常。我观察到的另一个奇怪之处是,我的 NSViewController 的一些属性在随机情况下丢失,如 XCode 的调试器中未列出的那样。发生这种情况时,我的插件会崩溃并告诉我无法识别的选择器问题。任何人都可以在这里阐明一下吗?

提前谢谢你。

【问题讨论】:

【参考方案1】:

内存地址很可能指向某种其他类型的对象,或者是一块已释放的内存。也许是由于某处过度释放/保留不足。你用过NSZombies吗?地址消毒剂?我相信这是在插件中的事实实际上是无关紧要的。

【讨论】:

嗨。这就说得通了。我认为发生的事情是我有另一个插件项目使用相同的框架“连接”到主机应用程序,尽管使用的是旧版本。似乎 pluginkit 只是加载从主机应用程序运行时中随机源中提取的一个框架版本,无论另一个插件是否有更新的版本。这可能需要我将自定义框架嵌入到其他地方,或者以不同的方式。我将不得不对此进行更多调查。谢谢。 由于符号冲突,您将无法将两个框架同时链接到同一个进程中。因此,要么弄清楚如何使用 XPC,要么将其拆分为单独的进程?祝你好运。

以上是关于macOS - 自定义框架中的对象引发无法识别的选择器错误的主要内容,如果未能解决你的问题,请参考以下文章

在自定义 init 方法上发送到实例的无法识别的选择器

自定义配置集合 - 无法识别的元素“addService”

php 无法识别的自定义帖子类型的帖子配额。一些旧主题注册Pro Sites无法识别的帖子类型,这可以用于限制

调用本机模块会引发“无法识别的 objc 方法”错误

调用本机模块会引发“无法识别的 objc 方法”错误

setDelegate 到我的自定义视图控制器落下无法识别的选择器