我在 Catalina (10.15) 的 GM 版本上使用 Xcode 11。我正在为 Mac Catalyst 构建我的 iOS 应用程序。我的 iOS 应用程序的部署目标是 iOS 11。
我在视图控制器中有一条简单的线,例如:
self.modalInPopover = YES;
在 iOS 中编译干净。当我切换到“我的 Mac”目的地时,我收到了弃用警告:
'modalInPopover' 已弃用:首先在 macCatalyst 13.0 中弃用
好的。我可以切换到 iOS 13 中添加的新方法:
if (@available(iOS 13.0, *)) {
self.modalInPresentation = YES;
} else {
self.modalInPopover = YES;
}
modalInPopover
这应该可以解决它,但我仍然会收到关于在else
块中使用的相同的弃用警告。
奇怪的是相应的 Swift 代码没有给出任何警告。只有 Objective-C 代码继续给出警告。
if #available(iOS 13, *) {
self.isModalInPresentation = true
} else {
self.isModalInPopover = true
}
我什至尝试将其更新@available
为:
if (@available(iOS 13.0, macCatalyst 13.0, *)) {
但这并没有改变任何东西。
以下灾难解决了这个问题,但它不应该是必需的:
#if TARGET_OS_MACCATALYST
self.modalInPresentation = YES;
#else
if (@available(iOS 13.0, *)) {
self.modalInPresentation = YES;
} else {
self.modalInPopover = YES;
}
#endif
我错过了什么还是这是一个 Xcode 错误?如何在不重复使用#if TARGET_OS_MACCATALYST
Swift 中不需要的代码的情况下消除 Objective-C 中的弃用警告。