我的应用支持iOS 6
和iOS 7
。我正在使用仅iOS7
提供的一些方法(例如suspend
),但iOS6
中不提供这些方法。但是,我正在为iOS6
和iOS7
使用正确的分支(相应地设置条件)。但是,当我使用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'"
答案 0 :(得分:3)
您发布的代码存在一些问题。
suspend
没有名为UIApplication
的公开方法。您似乎试图调用私有API。编译器抱怨,因为它找不到名为suspend
的方法(因为没有找到公共方法)。作为旁注,这很可能会导致您的应用被Apple拒绝。
永远不要睡在主线上。非常糟糕。
永远不要致电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 -