场景
事情是这样的,今天心血来潮想把工程中使用了苹果已弃用方法后得到的警告处理一下,就是这样一段代码,适配 iOS6是很可悲,我知道,你们别说了5555,上个皂片先看下
如果要适配低版本,这样的警告应该不少,每次 Build 的时候就感觉它在对我说:我就喜欢你看我不爽又干不掉我的样子。我这暴脾气,赶了好久的版本,好不容易得点空,必须干掉
其实很多东西都是早就有了解决办法,需要我们去发现而已
代码块处理
BOOL is_iOS6 = [[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f;
if (is_iOS6) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
label.textAlignment = UITextAlignmentCenter;
#pragma clang diagnostic pop
}
办法很简单,但是我后来就在想,那么第一个发现*"-Wdeprecated-declarations"*这个关键字的是谁呢,遇到别的 warning 是不是也有这种解决办法, 我再次在网上search, 果然是从 Apple 得到的信息,点击警告信息,右键选择 Reveal In Log, 就可以看到警告的详细信息
中括号中的 -Wdeprecated-declarations 便是我们想要得到的信息了
知道如果找到关键字之后就容易了,以后遇到的 warning 又明知干不掉的时候就用这种方法隐藏即可,是不是很方便呢。
通用格式
#pragma clang diagnostic push
#pragma clang diagnostic ignored "上文得到的错误信息"
// 代码块
#pragma clang diagnostic pop
但是有时候在一个文件中,有很多重复的这种 warning,多见第三方库,一个个改未免太麻烦,所以可以对某一个文件隐藏所有这类 warning。
文件处理
在 Compile Sources 设置某个文件的 Compiler Flags
得到的 warning 信息是 -Wdeprecated-declarations 需要改成 -Wno-deprecated-declarations
即所有的这类报错都是 -W错误信息 的格式,我们需要将 -W 替换成 -Wno- 即告诉编译器这个文件的这个错误不在提示警告,可以添加多个
这是对整个文件的 warning 进行隐藏,有时候工程中这类 warning 我们都不想看到,一个个设置也是怪累的,所以也可以对工程进行处理
工程处理
在 PROJECT -> Build Settings -> Apple LLVM 6.1 - Custom Complier Flags 中的Other Warning Flags 一栏设置即可
来源: