40

我正在使用AddThis在我的 iOS 应用程序中添加共享选项。

我已经导入了这些类并将 -fno-objc-arc 标志添加到所有导入的类中,因为它们不使用 ARC。

但是,当我尝试运行该应用程序时,我会遇到一系列解析问题,例如:

Expected identifier or '('
Unknown type name 'NSString'
Unknown type name 'Protocol'
...

这些错误发生在 NSObjCRuntime、NSZone 和 NSObject 中。我也包含了必要的框架。有任何想法吗?

如果有帮助,请包括此图像: 图片

4

6 回答 6

130

当我尝试将 C 代码(.h 和 .c)与 Objective-C 代码混合时,我的项目也遇到了同样的问题。找到问题的原因:

检查您的 .pch 文件以确保每个 Objective-C 框架 #import(例如#import <UIKit/UIKit.h>)都包含在:

#ifdef __OBJC__

#endif

如果它们超出此条件范围,编译器将尝试将 Objective-C 框架导入 C 源代码。

希望有帮助。

于 2012-11-05T15:14:16.050 回答
21

我刚刚把Base64Transcoder.c的文件名改成了Base64Transcoder.m,现在项目编译好了。我不知道为什么这可以解决问题,但它确实有效。

于 2012-08-08T05:28:34.150 回答
19

我有同样的问题,使用带有目标 C 的 C 和 C++ 代码,我没有 .pch 最简单的解决方案是进入您的构建设置 - >自定义编译器标志并将“其他 C 标志”设置为“-x 目标” -c”并将“Other C++ Flags”设置为“-x objective-c++”

这将使用 xCode 7.2 解决问题

于 2016-02-04T10:53:23.013 回答
17

当我的项目包含 .cpp 文件时,我遇到了同样的问题。

如果 .cpp 文件不包含 ObjectiveC 框架(例如),它必须是“Default-C++ Source”类型

在此处输入图像描述,

但如果 .cpp 文件具有 ObjectiveC 框架 - 它必须是“Objective-C++ Source”

在此处输入图像描述

于 2014-07-03T18:47:04.323 回答
3

TLDR:如果您的 PCH 文件正常,请查看您的 CPP 文件头,看看您是否不小心包含了 Objective C 对象的任何头。

详细信息:我得到这个是因为我不小心在 C++ 类头中间接包含了一个 Objective-C 类头。结构是这样的:

Compass.h 定义了一个纯Objective C 类。

ActionTracker.h 定义了一个理解 Objective C 结构的 C++ 类(通过 ActionTracker.mm)。

HelloWorld.h 定义了一个纯 C++ 类。

在我原来的设置中,HelloWorld.h 包含了 ActionTracker.h,但这没关系,因为 ActionTracker.h 还没有包含 Compass.h。后来,我更改了我的代码并将 Compass.h 包含在 ActionTracker.h 中,然后将其拉入 HelloWorld.h,我得到了这些错误。

于 2014-06-15T05:30:26.947 回答
0

当我尝试将 info.plist 文件从一个目录移动到另一个目录时,我遇到了同样的问题。这以某种方式触发了 XCode 编辑该目标的构建阶段,并显着增加了“编译源”和“复制捆绑资源”的数量。

幸运的是,我的项目有多个用于测试的目标(即 App Demo、App Dev、App Local、App 1.1、App 1.2 等)

所以我只是复制了一个未受影响的目标并将其重命名(也重命名了捆绑标识符和构建方案),这显然解决了我的问题,因为受影响的不是整个项目,而只是那个特定的目标。

如果您想尝试我的解决方案,请尝试从头开始创建一个新目标,或者复制并重命名任何未受影响的目标。

于 2014-11-07T08:56:18.090 回答