JSONKit 实现上的错误

Posted

技术标签:

【中文标题】JSONKit 实现上的错误【英文标题】:Errors on JSONKit implement 【发布时间】:2012-04-04 12:00:02 【问题描述】:

JSONKit.hJSONKit.m 文件导入我的项目后,我收到以下错误。我浏览了又浏览了,但似乎没有人遇到过这些问题?

我所做的只是导入文件并构建,然后我得到了这个

是我忘记导入还是...??????

【问题讨论】:

【参考方案1】:

您可以在 JSONKit 文件中禁用 ARC(自动引用计数)。

一般步骤是:

    转到您的项目设置,在 Build Phases > Compile Sources 下 选择要禁用 ARC 的文件并添加 -fno-objc-arc 编译器标志。您可以通过选择文件然后按“Enter”键一次为多个文件设置标志。

更多详情请参考这篇帖子:ios 5 Best Practice (Release/retain?)。

希望对你有帮助。

编辑

经过讨论,我们还有一些其他的方案来解决这个问题。例如,您可以将 JSONKit 转换为 ARC 兼容的。但是根据Mike Weller的说法,转换起来会很困难,因为JSONKit使用malloc来管理内存。

我认为使用-fno-objc-arc编译器标志是一种低风险且方便的解决问题的方法。

【讨论】:

@ParthBhatt 是的,我同意。必须有一些其他的方法可以解决这个问题。例如,我们可以将 JSONKit 更改为其他支持 GCD 的 json 库。在我看来,使用 -fno-objc-arc 编译器标志是解决此问题的低风险方法。【参考方案2】:

tangqiaoboy 的回答会解决这些错误,但您也可以考虑使用 NSJSONSerialization 类。它使将 NSDictionarys 和 NSArrays 转换为 JSON 变得非常容易,反之亦然。

祝你好运!

【讨论】:

据我所知,NSJSONSerialization只存在于ios5中。如果我们要支持 ios4,我们必须使用 3rd part lib。【参考方案3】:

您可以按照以下步骤将您的项目转换为ARC 兼容的

转到Edit menu -> Refactor -> Convert to Objective-C ARC...

或者,如果您 do not 想在当前项目中使用 ARC,请按照 tangqiaoboy 的步骤操作。

【讨论】:

JSONKit 不适用于 ARC,因为它是自定义内存管理。 @MikeWeller:我目前正在使用带有 ARC 的 JSONKit 没有任何问题??我认为您从未尝试过使用 ARC 的 JSONKit! 因为 JSONKit 明确不支持它。它在内部使用 malloc 和 free 来分配对象内存。 ARC 不适用于自定义对象分配。 @Devang 您可以在 ARC 项目中使用 JSONKit。正如这个答案所暗示的,您不能将 JSONKit 编译或转换为启用 ARC 的代码。您需要更改 JSONKit 文件的编译器设置。 JSONKit 使用 malloc 为 Objective-c 对象分配内存。在 ARC 下,您必须使用 alloc 分配对象。否则 ARC 将尝试释放 JSONKit 对象,假设它们已由系统分配。这行不通。

以上是关于JSONKit 实现上的错误的主要内容,如果未能解决你的问题,请参考以下文章

无法为 JSONkit 关闭 ARC

JSONKit +lidenbrock 与。 RestKit?(使用CoreData)

适用于 iPhone 应用程序的 JSONKit?

JSONKit 给出解析错误,但 JSONLint.org 说它是有效的

用于带有 ARC 的 xcode 4.6 ios 6 的 JSONKit?

NSJSONSerialization 是不是比 JSONKit 更容错、更健壮?