【发布时间】:2014-10-16 21:38:39
【问题描述】:
我正在制作一个使用 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 模拟器上运行该应用程序时,该应用程序正常启动并且不显示警报。作为记录,我知道警报没有按钮,但我不希望它消失。它应该只在 iPad 或 iOS 8 以下的设备上显示,因此在显示时不需要消失。
那么为什么我的应用没有在 iPad 上显示警报视图?控制台没有显示错误。
编辑:没有按钮的通知不会出现在最终产品中,只是在测试中。但是,这一点仍然存在,因为警报仍应显示。
【问题讨论】:
-
Apple 不会让你这样做。仅限 iPhone 的应用程序必须在 iPad 上按原样运行。当然,您可以让应用程序需要某些东西,但一般来说,您阻止在 iPad 上运行的尝试是行不通的,如果这样做了,也不会被接受。
-
@rmaddy 我知道,这只是为了在开发过程中测试系统。不管苹果喜欢与否,这应该在模拟器中工作,但它没有。
-
@rmaddy 可能应该在问题中提到这一点。我刚刚编辑了这个问题以明确这一点。
-
仅限 iPhone 的应用程序不知道它们在 iPad 上。
userIntefaceIdiom将返回“iPhone”,即使是在 iPad 上用于仅 iPhone 的应用程序。 -
@rmaddy 我在其中添加了一个只是为了更好地衡量,尽管我想我可以从技术上删除它。
标签: ios objective-c ipad uialertcontroller healthkit