当使用仅适用于iOS 7的方法时,将抛出警告

时间:2014-01-29 07:38:01

标签: ios

我的应用支持iOS 6iOS 7。我正在使用仅iOS7提供的一些方法(例如suspend),但iOS6中不提供这些方法。但是,我正在为iOS6iOS7使用正确的分支(相应地设置条件)。但是,当我使用suspend方法时,我会收到警告。

这是我的方法:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
        UIApplication *app = [UIApplication sharedApplication];

    if([app respondsToSelector:@selector(suspend)])
    {
        [app performSelector:@selector(suspend)];

        [NSThread sleepForTimeInterval:1.0];
    }
        exit(0);
}

警告是

"Undeclared Selector 'suspend'"

4 个答案:

答案 0 :(得分:3)

您发布的代码存在一些问题。

  1. suspend没有名为UIApplication的公开方法。您似乎试图调用私有API。编译器抱怨,因为它找不到名为suspend的方法(因为没有找到公共方法)。作为旁注,这很可能会导致您的应用被Apple拒绝。

  2. 永远不要睡在主线上。非常糟糕。

  3. 永远不要致电exit。这是不允许的。

答案 1 :(得分:2)

正如讨论显示你真正想做的是阻止用户在iPod touch上安装应用程序,我会在这个问题上添加一个答案:

停止在某些设备上安装该应用的方法是使用您应用的plist中的UIRequiredDeviceCapabilities

根据this list,似乎magnetometer与您将获得完美解决方案一样接近。除iPad1外,所有iPhone和iPad都支持它,任何iPod touch迭代都不支持它......

答案 2 :(得分:0)

发出警告是因为导入的头文件都没有声明与选择器'suspend'匹配的方法。

suspend是一个私有API。

答案 3 :(得分:0)

您可以通过创建UIApplication的类别定义并声明挂起函数来禁止警告,否则您可以使用-warc标志来禁止它,但是您必须找到正确的警告名称。

也许是这样的:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundefined-selector"
//your warning causing code here
#pragma diagnostic pop

-OOOOR -

尝试此解决方案:How to get rid of the 'undeclared selector' warning