我接手了一个目标为iOS6+的iOS项目。几周前,我将其移植到Xcode 6并清理了所有警告。其中一个警告是:
'UITextAttributeTextShadowColor' is deprecated: first deprecated in iOS 7.0 - Use NSShadowAttributeName with an NSShadow instance as the value
我的解决方法使用了 NSShadowAttributeName,但我没有正确操作导致 App 在执行的某个时刻崩溃了。几周后发现问题后,我暂时还原回旧代码。然而,当我还原回旧代码时,弃用警告并没有重新出现。我一直无法找出原因并希望解决这个问题 - 警告不再显示让我感到不安。
值得一提的是,在某些代码段中,由于需要维护对 iOS 6 的支持,我需要消除弃用警告。在这些情况下,有单独的 iOS 6 和 iOS 7+ 设备的代码,并且 iOS 6 代码被包围在:
SILENCE_IOS7_DEPRECATION(
// iOS 6 code here
);
(参见https://dev59.com/GnE85IYBdhLWcg3wwWet#26564750)这使用了:
#define SILENCE_DEPRECATION(expr) \
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \
expr; \
_Pragma("clang diagnostic pop") \
} while(0)
#define SILENCE_IOS7_DEPRECATION(expr) SILENCE_DEPRECATION(expr)
#define SILENCE_IOS8_DEPRECATION(expr) SILENCE_DEPRECATION(expr)
我选择了不调整Xcode设置并关闭大量代码的警告。
所以我很困惑,为什么把代码恢复到之前的状态后就不再显示过时警告了。
以下是我尝试过的方法:
1. 从我的代码中删除所有对SILENCE_DEPRECATION宏的引用 2. 确认目标下的“Build Settings”中已启用“Deprecated Functions” 3. 确认我的“Base SDK”设置为“Latest iOS (8.1)”,我的“iOS Deployment Target”设置为“iOS 6.0” 4. 在目标的“Build Settings”下添加了-Weverything到“Other Warnings Flags” 5. 检出旧版本的workspace,该版本在我的任何更改之前 6. 退出并重新启动Xcode 6 7. 尝试了Xcode 5 8. 重启电脑,然后启动Xcode 这些都没有导致过时警告回来。您有什么其他建议吗?
已弃用函数
在目标和项目中都设置为是。将构建设置
放在级别
模式下,也显示为已解决。 - davew