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")一点来自这个要点

UIAlertController 应该在设备是 iPad、未运行 iOS 8.0+ 或只是(出于某种其他原因)无法使用 HealthKit 时显示。这在纸面上一切都很好,但是当我在运行 iOS 8 的 iPad 2 模拟器上运行该应用程序时,该应用程序正常启动并且不显示警报。作为记录,我知道警报没有按钮,但我不希望它消失。它应该只在 iPad 或低于 iOS 8 的设备上显示,因此在显示时不需要消失。

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

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

4

3 回答 3

1

您是否检查过设备系列是否设置为通用?如果将其设置为 iPhone only,则用户惯用语永远不会是 iPad。使应用程序通用似乎已经解决了这个问题中提出的类似问题

PS,很抱歉我的第一个答案没有正确阅读问题。

于 2014-10-17T07:02:14.907 回答
0

如果您只想针对 iPhone,正确的方法是将其设置在您的部署目标中

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

一个开始的地方,

当然还有苹果的特征集合参考

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

于 2014-10-16T22:15:35.547 回答
0

尝试这样的事情:

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

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

于 2014-10-16T22:15:57.353 回答