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

epggiuax  于 2022-12-27  发布在  iOS
关注(0)|答案(6)|浏览(142)

我正在使用AddThis在iOS应用中添加共享选项。
我已经导入了这些类,并向所有导入的类添加了-fno-objc-arc标志,因为它们不使用ARC。
然而,当我尝试运行应用程序时,我遇到了一系列解析问题,例如:

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

这些错误发生在NSObjCRuntime、NSZone和NSObject中。我也包含了必要的框架。有什么想法吗?
包括此图像(如果有帮助):

64jmpszr

64jmpszr1#

当我尝试将C代码(.h和.c)与Objective-C代码混合时,我的项目遇到了同样的问题。
检查您的.pch文件,确保每个Objective-C framework #导入(例如#import <UIKit/UIKit.h>)都包含在:

#ifdef __OBJC__

#endif

如果它们超出了这个条件作用域,编译器会尝试将Objective-C框架导入C源代码。

ukqbszuj

ukqbszuj2#

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

jqjz2hbq

jqjz2hbq3#

我也遇到过同样的问题,使用C和C代码,但我没有.pch。最简单的解决方案是进入构建设置-〉自定义编译器标志,将“其他C标志”设置为“-x objective-c”,将“其他C标志”设置为“-x objective-c++”
这将在xCode 7.2中实现

hzbexzde

hzbexzde4#

当我的项目包含.cpp文件时,我也遇到过同样的问题。
如果.cpp文件不包含ObjectiveC框架(例如),则必须为“Default-C++ Source”类型



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

llew8vvj

llew8vvj5#

TLDR:如果PCH文件没有问题,请查看CPP文件头,看看是否意外地包含了Objective C对象的头。
详情:我得到这个是因为我不小心在C类头中间接地包含了一个Objective-C类头。
Compass. h定义了一个纯Objective C类。
h定义了一个理解Objective C结构的C
类(通过ActionTracker.mm)。
HelloWorld. h定义了一个纯C++类。
在我最初的设置中,HelloWorld. h包含ActionTracker. h,但这没关系,因为ActionTracker. h还不包含Compass. h。后来,我更改了代码,将Compass. h包含在ActionTracker. h中,然后将其拉入HelloWorld. h,我得到了这些错误。

yc0p9oo0

yc0p9oo06#

当我试图将info.plist文件从一个目录移动到另一个目录时,我遇到了同样的问题。这不知何故触发了XCode编辑该目标的构建阶段,并显著增加了“编译源代码”和“复制捆绑资源”的数量。
幸运的是,我的项目有多个目标,我用来测试,(即应用程序演示,应用程序开发,应用程序本地,应用程序1.1,应用程序1.2等)
所以我只是复制了其中一个未受影响的目标并对其进行了重命名(同时重命名了bundle标识符和构建方案),这显然为我解决了问题,因为受影响的不是整个项目,而只是那个特定的目标。
如果您想尝试我的解决方案,请尝试从头创建一个新目标,或者复制并重命名任何未受影响的目标。

相关问题