Dav*_*fal 27 iphone xcode warnings suppress-warnings
我正在针对Base 4.0 SDK编写iPhone应用程序,但我的目标是OS 3.1.3,因此OS 3用户可以使用该应用程序.
我打电话:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
Run Code Online (Sandbox Code Playgroud)
在iOS 4.0中已弃用.我知道这一点,如果我们在iOS 4.0或更高版本下运行,我们已采取措施调用较新的"withAnimation"版本.
但是,我收到一条警告,我正在调用一个已弃用的SDK.
我想在这个特定的地方禁用此特定警告.我想要所有其他警告(包括其他位置的相同弃用警告)
这可以在Xcode中实现吗?
Gui*_*ume 76
对于CLANG,这有效:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
// Here I like to leave a comment to my future self to explain why I need this deprecated call
NSString *myUDID = [[UIDevice currentDevice] uniqueIdentifier];
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)
您可以在方法中使用它,这使您可以非常具体地说明导致您想要忽略的警告的行.
Wil*_*oss 19
您可以使用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
Run Code Online (Sandbox Code Playgroud)
我不知道这是否适用于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];
Run Code Online (Sandbox Code Playgroud)
或者以较少容错的方式:
UIApplication *app = [UIApplication sharedApplication];
SEL sel = @selector(setStatusBarHidden:animated:);
IMP imp = [app methodForSelector:sel];
imp(app, sel, YES, YES);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13531 次 |
最近记录: |