我正在使用Xcode 5 / iOS SDK 6.1构建。如果应用在iOS 7.x设备上运行,则应检查是否为应用设置了“设置 - >常规 - > BackgroundAppRefresh”设置。由于此属性仅适用于iOS 7,我正在执行:
if([[UIApplication sharedApplication] respondsToSelector:@selector(backgroundRefreshStatus)])
{
NSInteger outcome=[[[UIApplication sharedApplication] performSelector:@selector(backgroundRefreshStatus)] integerValue];
//do something with "outcome"
}
然而......应用程序在iOS 7的“performSelector”行崩溃,这很奇怪,因为它传递了“respondsToSelector”调用?谁知道为什么?我也尝试过NSSelectorFromString(@“backgroundRefreshStatus”),结果相同。
答案 0 :(得分:4)
那里有很多不必要的代码。除非{7}}选择器在iOS 7之前作为私有API存在,否则您不需要进行版本检查。
您对backgroundRefreshStatus
的使用也不正确,您无需使用@selector
,只需调用方法:
performSelector
答案 1 :(得分:1)
您正在使用字符串作为选择器。尝试没有字符串:
UIApplication *app = [UIApplication sharedApplication];
if([app respondsToSelector:@selector(backgroundRefreshStatus)])
{
UIBackgroundRefreshStatus outcome = [app performSelector:@selector(backgroundRefreshStatus)];
// or outcome = [app backgroundRefreshStatus]
}