首页 文章

无法将设备检测为iPad

提问于
浏览
0

我正在制作一个使用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 回答

  • 1

    您是否检查过设备系列是否设置为通用?如果将其设置为iPhone,则用户习惯用法永远不会是iPad . 使应用程序通用似乎解决了这个问题question

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

  • 0

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

    I've changed this one to match the iPhone only

    我已将此更改为仅与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

    一个开始的地方,

    当然还有苹果的特质收集参考

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

  • 0

    尝试这样的事情:

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

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

相关问题