1

我试图通过 Xcode 中的 Edit->Refactor 将我的非 ARC 项目与 release 等转换为 Objective-C ARC 但在转换过程中我在 SBJson 解析器源文件中遇到错误:“这个源文件必须在启用 ARC 的情况下编译!”。但我使用的是 ARC 版本的 SBJson 3.1。

所以我不明白出了什么问题。有人可以帮忙吗?

PS我试图遵循答案中的建议,但结果是一样的:

在此处输入图像描述

在此处输入图像描述

如您所见,添加此标志没有帮助。

4

4 回答 4

5

错误消息来自 SBJson。

NSObject+SBJson.m

#if !__has_feature(objc_arc)
#error "This source file must be compiled with ARC enabled!"
#endif

作为猜测,重构任务尝试在没有 ARC 的情况下编译项目,以检查其中的所有对象。

我不确定这个重构工具,可能有一种方法可以从重构中排除一些文件。如果失败,那么我会尝试在任何 SBJson 文件上注释这些行,直到重构完成,然后在重构项目后,您可以恢复 SBJson 文件。

于 2013-01-13T16:57:36.893 回答
4

转到您的项目设置并单击“构建阶段”。打开“编译源”,突出显示所有 SBJson 文件并双击其中一个。输入-fobjc-arc.

于 2013-01-13T16:44:10.743 回答
3

另一种方法,并在SBJson 文档中推荐:

http://deshartman.wordpress.com/2011/09/02/configuring-sbjson-framework-for-xcode-4-2/

基本上,您将 sbjson 框架作为项目包含在项目中,然后将二进制文件链接到框架。然后单独编译框架,因此没有 ARC 冲突。

请注意,如何将 SBJson.xcodeproj 拖到项目中很重要 - 确保它位于项目的文件树中,而不是创建为创建工作区的单独项目。上面的链接显示了它的外观截图。请注意,在将 SBJson.xcodeproj 拖入我的项目后,我必须重新启动 Xcode 才能使其正确显示。

另一种方法是使用工作区。您将创建一个包含两个项目的工作区,然后以类似的方式链接 sbjson 框架。当我这样做时,不需要在“目标依赖项”中添加任何内容,如上面的链接所示,但我确实需要在“将二进制文件与库链接”中添加项目。这是此设置在我的机器上的外观,其中“SBJSONTestWorkspaces”是我要使用 SBJson 的项目的名称:

在此处输入图像描述

以下是有关工作区的一些文档:

http://developer.apple.com/library/mac/#featuredarticles/XcodeConcepts/Concept-Workspace.html#//apple_ref/doc/uid/TP40009328-CH7

于 2013-04-04T18:53:45.523 回答
0

由于您的项目是在 ARC 中创建的,因此 xcode 期望每个文件都与 ARC 兼容。而 SBJSON 文件不得符合 ARC 标准。您需要从 ARC 检查中排除这些文件。这可以通过选择不需要检查 ARC 的文件来完成。如果您转到项目设置 -> 构建阶段 -> 编译源,则可以完成此操作。会有您的 SBJSON 文件,您可以在此处添加不同的标志。要忽略 ARC 检查,您必须添加“-fobjc-arc”标志。您可以通过双击一个文件,弹出一个新窗口并在该窗口中添加上述标志来执行此操作。

于 2013-01-13T17:01:41.777 回答