无法将设备检测为iPad

时间:2014-10-16 21:38:40

标签: ios objective-c ipad uialertcontroller health-kit

我制作了一款使用HealthKit的应用。该应用必须无法在iPad上运行,因此我的viewDidLoad方法包含if / then / else语句,以向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

UIAlertController应显示设备何时是iPad,未运行iOS 8.0+,或者仅仅(由于某些其他原因)无法使用HealthKit。这在纸面上都很好,但是当我在运行iOS 8的iPad 2模拟器上运行应用程序时,应用程序正常启动并且不显示警报。为了记录,我知道警报没有按钮,但我不想让它消失。它应仅显示在iOS或低于iOS 8的设备上,因此在显示时不应该消失。

那么为什么我的应用程序没有在iPad上显示警报视图?控制台显示没有错误。

编辑:没有按钮的通知不会出现在最终产品中,只是在测试中。然而,这一点仍然存在,因为警报仍然应该出现。

3 个答案:

答案 0 :(得分:1)

您是否检查过设备系列是否设置为通用?如果它被设置为iPhone,那么用户的习语将永远不会是iPad。使应用程序具有通用性似乎解决了此question

中提出的类似问题

PS,为我的第一个答案道歉,没有正确地阅读这个问题。

答案 1 :(得分:0)

如果您只想定位iPhone,正确的方法是在部署目标中设置它

I've changed this one to match the iPhone only

我已将此更改为仅与iPhone匹配

现在,在这种情况下,你仍然可以通过“向上扩展”方法(通过扩展iPhone版本以匹配iPad)运行iPhone应用程序。

如果在这种情况下仍然需要该警报,则可以将其放入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

一个开始的地方,

当然还有apple的特质集合参考

https://developer.apple.com/library/IOs/documentation/UIKit/Reference/UITraitSet_ClassReference/index.html

答案 2 :(得分:0)

尝试这样的事情:

NSString *modelString = (NSString *)[UIDevice currentDevice].model;
if ([modelString hasPrefix:@"iPad"])
{
   // iPad
   return YES;
}

我相信即使在iPad上运行仅限iPhone的应用程序,这也应该有效。