Я пишу приложение для iPhone против Основы 4,0 SDK, но я нацелен на ОС 3.1.3 так ОС, 3 пользователя могут использовать приложение.
Я звоню:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
который удерживается от использования в iOS 4.0. Я знаю об этом и имею в распоряжении меры для вызова более новой "withAnimation" версии, если мы работаем под iOS 4.0 или больше.
Однако я получаю предупреждение, что я называю SDK устаревший.
Я хотел бы отключить это определенное предупреждение в этом определенном месте. Я хочу все другие предупреждения (включая то же предупреждение устаревшее в других местоположениях)
Это может быть выполнено в XCode?
Возможно, вы сможете использовать прагмы 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.
По сути, он сохраняет состояние предупреждений / ошибок, отключает устаревшее предупреждение, компилирует функцию, а затем восстанавливает состояние диагностики.
Вы можете использовать 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);