ios-分析NSObjCRuntime、NSZone和NSObject中的问题

ios-分析NSObjCRuntime、NSZone和NSObject中的问题,ios,compiler-errors,automatic-ref-counting,addthis,Ios,Compiler Errors,Automatic Ref Counting,Addthis,我正在使用在iOS应用程序中添加共享选项 我已经导入了这些类,并向所有导入的类添加了-fno-objc-arc标志,因为它们不使用arc 但是,当我尝试运行该应用程序时,会遇到一系列解析问题,例如: Expected identifier or '(' Unknown type name 'NSString' Unknown type name 'Protocol' ... 这些错误发生在NSObjCRuntime、NSZone和NSObject中。我也有必要的框架。有什么想法吗 包括此图像(

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

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

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

Expected identifier or '('
Unknown type name 'NSString'
Unknown type name 'Protocol'
...
这些错误发生在NSObjCRuntime、NSZone和NSObject中。我也有必要的框架。有什么想法吗

包括此图像(如果有帮助):

我刚刚将Base64Transcoder.c的文件名更改为Base64Transcoder.m,现在项目可以编译了。我不知道为什么这样可以解决这个问题,但它是有效的。

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

检查.pch文件,确保每个Objective-C框架导入(如
#导入
)都包含在以下文件中:

#ifdef __OBJC__

#endif
如果它们不在这个条件范围内,编译器将尝试将Objective-C框架导入C源代码


希望能有所帮助。

TLDR:如果您的PCH文件正常,请查看您的CPP文件头,以查看是否意外包含了目标C对象的任何头

详情如下: 我之所以这样做,是因为我意外地在C++类头中意外地包含了ObjuleC类头。结构如下:

Compass.h定义了一个纯目标C类

ActhReTrace.h定义了一个C++类,它理解了目标C构造(通过ActoTrrace.mm)。

HeloWord .h定义了纯C++类。


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

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

如果.cpp文件不包含ObjectiveC框架(例如),则必须使用“Default-C++源”类型

,

但是,如果.cpp文件有Objective框架,那么它必须是“Objective-C++源代码”


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

幸运的是,我的项目有多个用于测试的目标(即应用程序演示、应用程序开发、应用程序本地、应用程序1.1、应用程序1.2等)

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


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

< P>我使用了C和C++代码,带有目标C,而我没有一个.pCH。 最简单的解决方案是进入您的构建设置->自定义编译器标志,并将“其他C标志”设置为“-X ObjuleC”,并将“其他C++标志”设置为“-X ObjuleC++”


这将在xCode 7.2中实现这一点。您是否尝试在c文件中实现这一点?不确定您的意思,但库中有一个名为Base64Transcoder.cLooks的.c文件,类似于此处的相同问题:,但没有解决方案。假设我有一个.c文件,我该如何解决这个问题?只有当您尝试将ObjC框架链接到c文件时(至少以我的经验来看),问题才会出现。Base64.c导入任何框架吗?非常感谢,刚刚帮我省去了几个小时的头痛!你一定想知道问题是否在于你试图将Objective-C框架导入到C代码中,为什么他们不这么说?为什么XCode会生成几乎毫无意义的神秘错误消息?无论如何,谢谢!!!是的,我把我所有的导入都放在了ifdef里面的.pch文件中,一切都正常了。不客气。这正是这个社区的价值所在。我从中得到了更多的帮助:)谢谢!Followers,还要确保不定义NSStrings或const。OBJC块外的NSN编号!这正是我问题的原因。谢谢,我没有PCH,那我该怎么办?我猜是的。您将您的c文件转换为objective-c文件,这样在导入objective-c框架之后就可以工作了。有趣的是,.pch文件被导入到所有c文件以及obj-c文件中,因此,如果pch文件中存在未受保护的obj-c导入,您最终会收到这个愚蠢的错误消息。难以置信。非常感谢。C++设置对我起作用,我的项目没有.pCH文件和..cx7.2.1文件。