4

我继承了一个针对 iOS6+ 的 iOS 项目。几周前,我将它移至 Xcode 6 并清除了所有警告。一个这样的警告是:

'UITextAttributeTextShadowColor' is deprecated: first deprecated in iOS 7.0 - Use NSShadowAttributeName with an NSShadow instance as the value

我对此的修复使用了 NSShadowAttributeName,但我做得不正确,导致应用程序在执行期间的某个时间点崩溃。几周后我发现时,我暂时恢复到旧代码。但是,当我恢复到旧代码时,弃用警告并没有回来。我一直无法弄清楚为什么并想解决这个问题 -它警告我没有显示警告

值得一提的是,在某些代码部分中,由于需要保持对 iOS 6 的支持,我需要消除弃用警告。在这些情况下,iOS 6 和 iOS 7+ 设备以及 iOS 6 代码有单独的代码被包围:

SILENCE_IOS7_DEPRECATION(

// iOS 6 code here

);

(见https://stackoverflow.com/a/26564750/3352624)这使用:

#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. 已验证Deprecated FunctionsBuild Settings目标
  3. 已验证我Base SDK的设置为Latest iOS (8.1)并且我iOS Deployment Target的设置为iOS 6.0
  4. -Weverything为目标添加Other Warnings FlagsBuild Settings
  5. 从 git 检查了我的工作区的旧版本,这是在我进行任何更改之前
  6. 退出并重新启动 Xcode 6
  7. 试过 Xcode 5
  8. 重新启动我的计算机,然后启动 Xcode

这些事情都没有导致弃用警告再次出现。有什么想法我接下来应该尝试什么?

4

1 回答 1

7

我意识到这是一个非常古老的线程,但我想我会发布一个答案,以防其他人找到这个线程。

它还取决于目标的部署目标设置(即,在“目​​标”下,单击应用程序并选择顶部的“常规”,在“部署信息”部分查看“部署目标”)。例如,如果我有 7.1 的部署目标并使用 iOS 8 中已弃用的功能,我将不会收到警告。但是,如果我将部署目标设置为 8.x 或 9.0,我将收到有关这些功能的警告。

于 2015-07-06T18:38:54.203 回答