Я использую Xcode 11 на сборке GM Catalina (10.15). Я работаю над созданием своего iOS-приложения для Mac Catalyst. У моего приложения для 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.