繁体   English   中英

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

[英]ios - Parse Issues in NSObjCRuntime, NSZone, and NSObject

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

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

但是,当我尝试运行应用程序时,我得到了大量的解析问题,例如:

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

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

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

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

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

#ifdef __OBJC__

#endif

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

希望有所帮助。

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

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

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

在此输入图像描述

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

在此输入图像描述

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

这将通过xCode 7.2完成

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。 后来,我更改了我的代码并在ActionTracker.h中包含了Compass.h,然后将其拉入HelloWorld.h并得到了这些错误。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM