序列化时 JSONKit 无法识别的选择器

Posted

技术标签:

【中文标题】序列化时 JSONKit 无法识别的选择器【英文标题】:JSONKit unrecognized selector while serializing 【发布时间】:2012-02-16 01:27:27 【问题描述】:

我正在尝试使用 JSONKit 库并将源文件包含在我的项目中。我已包含 JSONKit.h 标头,以便包含的类别为 NSDictionary 对象提供 JSONData 和 JSONString 选择器。

  NSMutableDictionary* root = [NSMutableDictionary dictionary];
  [root setValue:@"CONNECT" forKey:@"command"];
  NSData* data = [root JSONData];

但在运行时出现以下错误:

 -[__NSCFDictionary JSONString]: unrecognized selector sent to instance 0x784b870

为什么分类没有给 NSDictionary 对象添加合适的方法?

【问题讨论】:

【参考方案1】:

我正在回答我自己的问题,因为我刚刚弄明白了。

我的代码是从另一个 ios 应用程序引用的静态库的一部分。包含导出类别的静态库时,使用该类别的应用程序必须使用“-ObjC”链接器标志链接。

【讨论】:

【参考方案2】:

虽然接受的答案为我解决了问题,但了解它为什么会(以及为什么它可能不会)绝对有用。如需更详细地了解此问题和可能的解决方案,请see this post。

【讨论】:

【参考方案3】:

这是一个 n00b 错误,但是当我将 JSONKit.h 和 JSONKit.m 文件导入我的项目时遇到了完全相同的异常,但没有勾选框以将其添加到 Xcode 中的目标。

打开 JSONKit.m,显示 Utilities 面板的 File Inspector 部分,并在 Target Membership 中确保您的应用旁边有一个复选框。

【讨论】:

以上是关于序列化时 JSONKit 无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

NSInvalidArgumentException,使用 performSegueWithIdentifier 时发送到实例的无法识别的选择器

Swift 3:将无法识别的选择器发送到手势识别器实例

目标动作模式的快速无法识别的选择器

快速代码崩溃:“发送到实例的无法识别的选择器”

使用 MyAppDelegate 时无法识别的选择器

popover segue 中无法识别的选择器