【问题标题】:UIActionSheet causes application to crash with XCode5 on iOS 8UIActionSheet 导致应用程序在 iOS 8 上使用 XCode5 崩溃
【发布时间】:2014-09-12 08:01:19
【问题描述】:

在测试我的应用程序以查看它如何与基于 iOS 8 的 XCode 5 构建一起工作。我遇到的最大问题是我们所有的确认对话框都会导致应用程序崩溃。如果我在 XCode 6 beta 上构建它,它不会崩溃,但弹出窗口不在窗口中心。

这里是代码。它调用 showInView,但不返回。所以我的问题是,我做错了吗?如果没有,发生了什么变化,我该如何解决?

NSException 被抛出在 showInView 上

-- 原因 NSString * @"应用程序试图以模态方式呈现一个活动控制器 <_uialertshimpresentingviewcontroller:>." 0x00007fab69747ec0

UIActionSheet* confirmAction = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"SiteUpToDate", nil)
                                                           delegate:self 
                                                  cancelButtonTitle:nil 
                                             destructiveButtonTitle:NSLocalizedString(@"Yes", nil)
                                                  otherButtonTitles:NSLocalizedString(@"No", nil), nil];

[confirmAction showInView:self.view];
[confirmAction release];

更新:我发现这是 Beta OS 和 Beta XCode 的问题。 iOS 8 正式发布后,我们的问题就迎刃而解了。

【问题讨论】:

  • 这是适用于 iPhone、iPad 还是两者兼有?它对一个有效,但对另一个无效?
  • 我只在物理 iPad Air 上试过这个。我没有尝试过 Air 模拟器,同样的问题,以及没有问题的 iPhone 5s。所以它似乎与平板电脑有关。
  • 我的意思是我现在已经在 Air 模拟器上试过了。
  • showInView 上抛出异常,它没有发布。我更新了问题以显示抛出的异常。
  • 为了更好地兼容 ios 8,您应该使用 ios 8 的条件代码并使用 UIAlertController。

标签: objective-c xcode5 ios8 xcode6


【解决方案1】:

我也遇到了同样的问题。我使用 ShowFromBarButtonItem 函数而不是 ShowInView 函数。

[organizeActionSheet showFromBarButtonItem:btnAction animated:NO]; 如果使用 ShowFromRect 或 showFromBarButtonItem 将不会出现运行时异常。我认为这是 IOS8 Beta 的一个错误,当我使用 ShowInView 运行时异常即将到来。

IOS Beta 4 中没有此错误..

使用 Xcode 5.1 构建时,我在调试窗口中确实收到了一些警告消息,但操作表确实出现了。 在 iOS 8 beta 4 中,它显示为视图外部(侧面)的一个小弹出窗口,而在 iOS 7 中,它曾经显示为从视图底部向上滑动的按钮。

【讨论】:

    【解决方案2】:

    据此https://developer.apple.com/library/ios/documentation/Uikit/reference/UIActionSheet_Class/index.html UIActionSheet 已弃用,您应该使用 UIAlertController 而不是 UIActionSheet。 答案来自这里: How to do "actionSheet showFromRect" in iOS 8?

    【讨论】:

      【解决方案3】:

      可能会解决您的问题的东西。在关闭任何类型的模式视图控制器后直接呈现 UIActionSheets 时,我们遇到了很多问题。如果确实如此,您需要仅在第一个模态消失后调用操作表“presentInView...”方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-11
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多