【发布时间】:2020-02-04 07:59:59
【问题描述】:
我在 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;
}
这应该可以解决问题,但我仍然收到关于在 else 块中使用 modalInPopover 的相同弃用警告。
奇怪的是对应的 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 复制代码的情况下消除 Objective-C 中的弃用警告,而这在 Swift 中是不需要的。
【问题讨论】:
-
如果你的部署目标是iOS11,你不需要
self.modalInPresentation = YES;for iOS -
我不知道为什么会这样:针对两个平台的项目应该到处都有目标检查。
-
@Cy-4AH “灾难”有点强,但它是一个问题,因为它正在复制代码。再说一遍,为什么这只是 Objective-C 的问题而不是 Swift 的问题?
标签: ios objective-c swift xcode11 mac-catalyst