performSelector“backgroundRefreshStatus”在iOS 7上崩溃

时间:2013-11-05 16:22:37

标签: objective-c ios7 xcode5

我正在使用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”),结果相同。

2 个答案:

答案 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]
}