Отключение определенного предупреждения в определенной строке в XCode

Я пишу приложение для iPhone против Основы 4,0 SDK, но я нацелен на ОС 3.1.3 так ОС, 3 пользователя могут использовать приложение.

Я звоню:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];

который удерживается от использования в iOS 4.0. Я знаю об этом и имею в распоряжении меры для вызова более новой "withAnimation" версии, если мы работаем под iOS 4.0 или больше.

Однако я получаю предупреждение, что я называю SDK устаревший.

Я хотел бы отключить это определенное предупреждение в этом определенном месте. Я хочу все другие предупреждения (включая то же предупреждение устаревшее в других местоположениях)

Это может быть выполнено в XCode?

27
задан mokagio 18 May 2016 в 06:49
поделиться

2 ответа

Возможно, вы сможете использовать прагмы GCC. Это должно отключить устаревшее предупреждение для вложенной функции.

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated"
-(void)foo{
    // As Georg Fritzsche notes below, the pragmas only work outside of functions
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
}
#pragma GCC diagnostic pop

Я не знаю, будет ли это работать с Clang, но он должен работать с GCC.

По сути, он сохраняет состояние предупреждений / ошибок, отключает устаревшее предупреждение, компилирует функцию, а затем восстанавливает состояние диагностики.

19
ответ дан 28 November 2019 в 04:05
поделиться

Вы можете использовать NSInvocation для обхода предупреждений независимо от используемого компилятора:

UIApplication *app = [UIApplication sharedApplication];
SEL sel = @selector(setStatusBarHidden:animated:);
NSMethodSignature *sig = [app methodSignatureForSelector:sel];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig];
BOOL b = YES;
[inv setTarget:app];
[inv setSelector:sel];
[inv setArgument:&b atIndex:2];
[inv setArgument:&b atIndex:3];
[inv invoke];

Или менее устойчивым к ошибкам способом:

UIApplication *app = [UIApplication sharedApplication];
SEL sel = @selector(setStatusBarHidden:animated:);
IMP imp = [app methodForSelector:sel];
imp(app, sel, YES, YES);
8
ответ дан 28 November 2019 в 04:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: