Mac Catalyst中的弃用警告,但仅在Objective-C中,而不在Swift中

问题描述 投票:0回答:1

我正在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的错误?如何在Objective-C中消除过时警告,而无需使用#if TARGET_OS_MACCATALYST复制代码,而这在Swift中是不需要的。

ios objective-c swift xcode11 maccatalyst
1个回答
0
投票

我的iOS应用的部署目标为iOS 11。

这就是原因。要在Swift中查看弃用警告,您需要说isModalInPopover不在iOS 13部署目标的available子句中。

对于Catalyst构建,您不向后兼容(没有向后兼容),因此就好像这是一个iOS 13部署目标,并且您会看到警告。

© www.soinside.com 2019 - 2024. All rights reserved.