无法将设备检测为iPad
我正在制作使用HealthKit的应用程序。该应用程序不能在iPad上工作,因此我的viewDidLoad
方法包含一个if/then/else语句以向iPad用户显示警报。这是我的代码:无法将设备检测为iPad
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0") && [HKHealthStore isHealthDataAvailable] == 1) {
...
}
else {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Whoops!" message:@"Looks like your device doesn't support HealthKit :(" preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alertController animated:1 completion:^(){
NSLog(@"Showed error alert because of unsupported device.");
}];
}
的SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")
位来自this gist。
时,该设备是一台iPad,是不是运行iOS 8.0或更高版本,或者只是(某些其他原因)的UIAlertController应该显示不能使用HealthKit。这一切都很好,但是当我在运行iOS 8的iPad 2模拟器上运行应用程序时,该应用程序将正常启动并且不显示警报。为了记录,我知道警报没有按钮,但我不希望它消失。它只能显示在iPad或iOS 8以下的设备上,因此在显示时不需要消失。
那么,为什么我的应用程序没有显示在iPad上的警报视图?控制台显示没有错误。
编辑:无按钮通知将不会在最终的产品,只是在测试中。然而,这一点仍然存在,因为警报仍应该显示出来。
是否检查该器件系列被设置为通用?如果它被设置为iPhone,则用户习惯用语永远不会是iPad。使应用普及似乎已经解决了这个question
PS问过类似的问题,道歉对我的第一个回答不读书的问题正确。
谢谢,作品像一个魅力。不用担心,我们都做到了。 – 2014-10-29 16:57:24
如果你想只针对iPhone,去了解这个正确的方法是将它在你的部署目标
我已经改变了这一个相匹配的iPhone只
现在,既然如此,您仍然可以通过“扩展”方法(通过缩放iPhone版本以适应iPad)来结束运行iPhone应用程序的iPad。
如果你仍然想在这种情况下该警报,那么您可以在您的viewDidLoad
if (self.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
NSLog(@"I'm an ipad");
UIAlertController *alert = [ UIAlertController alertControllerWithTitle:@"Sorry dude, no iPads" message:@"go buy an iphone" preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion:^{}];
}
在这种情况下删除此我使用了新的traitCollection属性来确定接口成语。
如果你只是想避免更大的屏幕,那么我建议着眼于规模类按iOS 8的这肯定将是最好的途径。
http://www.learnswift.io/blog/2014/6/12/size-classes-with-xcode-6-and-swift
一个地方得到它的一个开始,
当然苹果的特征集合引用和
尝试是这样的:
NSString *modelString = (NSString *)[UIDevice currentDevice].model;
if ([modelString hasPrefix:@"iPad"])
{
// iPad
return YES;
}
我相信这一点即使在iPad上运行仅iPhone应用程序也能工作。
苹果不会让你这样做。仅限iPhone的应用程序必须在iPad上按原样运行。您当然可以让应用程序需要某些东西,但总的来说,您尝试阻止在iPad上运行将不起作用,如果它确实不会被接受。 – rmaddy 2014-10-16 21:42:50
@rmaddy我知道,这只是为了在开发过程中测试系统。无论苹果是否喜欢它,这个_应该在模拟器中工作,但它不会。 – 2014-10-16 21:46:49
@rmaddy可能应该在问题中提到这一点。我刚刚编辑了这个问题以说明问题。 – 2014-10-16 21:48:21