为啥我的弹出框在 iPhone 6 Plus 上的 iOS 8.1 中崩溃? iOS 8 工作(实际上是 Xcode 6.0 到 6.1 的错误)

Posted

技术标签:

【中文标题】为啥我的弹出框在 iPhone 6 Plus 上的 iOS 8.1 中崩溃? iOS 8 工作(实际上是 Xcode 6.0 到 6.1 的错误)【英文标题】:Why is my popover crashing in iOS 8.1 on iPhone 6 Plus? iOS 8 worked (actually Xcode 6.0 to 6.1 bug)为什么我的弹出框在 iPhone 6 Plus 上的 iOS 8.1 中崩溃? iOS 8 工作(实际上是 Xcode 6.0 到 6.1 的错误) 【发布时间】:2014-11-12 15:31:01 【问题描述】:

我很高兴看到 Apple 在 ios 8 中允许 iPhone 上的弹出框(无论如何,在某些情况下,更大的 iPhone,仅限横向),我将一些代码从显示 UIPickerview 切换到 UIPopoverController,就像我在这个 iPad 应用程序中使用的那样。现在我收到了有关 iOS 8.1 崩溃的报告,在我的测试中,我在下面的第二行看到了崩溃:

    XfrGraphTypeVC *graphTypePopover = [[XfrGraphTypeVC alloc]
                                    initWithNibName:@"XfrGraphTypeVC"
                                    bundle:[NSBundle mainBundle]
                                    type:xfrChannelMode cellHeight:cellHt];

self.popoverController = [[NSClassFromString(@"UIPopoverController") alloc] initWithContentViewController:graphTypePopover];

我尝试了一些方法来解决它,但没有运气。在 iPad 上仍然可以正常工作。 Apple 有没有破坏什么东西?

编辑:仍然无法正常工作。苹果在 8.1 中改变了一些东西来打破这个。会发生什么?

编辑:现在我认为这是从 Xcode 6.1 开始的,因为使用 Xcode 6.0 构建的应用程序不会崩溃。

崩溃日志:

    Incident Identifier: CD6192B8-363D-4EAB-9392-8A366D1FD10C
CrashReporter Key:   797d45c1f30283e0885ce0a30c88ccdf6fd78036
Hardware Model:      iPhone7,1
Process:             AudioTools [4530]
Path:                /private/var/mobile/Containers/Bundle/Application/5EDE9ACF-5372-45B8-B370-3AFFD345ED24/AudioTools.app/AudioTools
Identifier:          com.studiosixdigital.audiotools
Version:             7.3.11 (7.3.11)
Code Type:           ARM (Native)
Parent Process:      launchd [1]

Date/Time:           2014-11-11 17:10:31.927 -0800
Launch Time:         2014-11-11 17:10:26.147 -0800
OS Version:          iOS 8.1 (12B411)
Report Version:      105

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x2379fc1f _exceptionPreprocess + 127
1   libobjc.A.dylib                 0x30fafc8b objc_exception_throw + 38
2   CoreFoundation                  0x2379fb65 +[NSException raise:format:] + 112
3   UIKit                           0x26e8a41b -[UIPopoverController _initWithContentViewController:popoverControllerStyle:] + 266
4   AudioTools                      0x004f4065 0x69000 + 4763749
5   UIKit                           0x26c8fc2b -[UIApplication sendAction:to:from:forEvent:] + 70
6   UIKit                           0x26c8fbd1 -[UIControl sendAction:to:forEvent:] + 44
7   UIKit                           0x26c7a863 -[UIControl _sendActionsForEvents:withEvent:] + 582
8   UIKit                           0x26c8f63d -[UIControl touchesEnded:withEvent:] + 588
9   UIKit                           0x26c8f317 -[UIWindow _sendTouchesForEvent:] + 522
10  UIKit                           0x26c88be1 -[UIWindow sendEvent:] + 544
11  UIKit                           0x26c5f3dd -[UIApplication sendEvent:] + 196
12  UIKit                           0x26ed2c29 _UIApplicationHandleEventFromQueueEvent + 13888
13  UIKit                           0x26c5de39 _UIApplicationHandleEventQueue + 1296
14  CoreFoundation                  0x23766377 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
15  CoreFoundation                  0x23765787 __CFRunLoopDoSources0 + 218
16  CoreFoundation                  0x23763ded __CFRunLoopRun + 772
17  CoreFoundation                  0x236b2211 CFRunLoopRunSpecific + 476
18  CoreFoundation                  0x236b2023 CFRunLoopRunInMode + 106
19  GraphicsServices                0x2aa650a9 GSEventRunModal + 136
20  UIKit                           0x26cbe1d1 UIApplicationMain + 1440
21  AudioTools                      0x0007c647 main + 50
22  AudioTools                      0x0006d028 start + 40

【问题讨论】:

您能分享导致崩溃的异常吗?应该显示在控制台中。 刚刚添加。哇,谁投了反对票,Apple? 为什么是[NSClassFromString(@"UIPopoverController") alloc] 而不是[UIPopoverController alloc]?你能符号化崩溃日志吗? 这只是为了防止在不支持弹出框的旧 iOS 上崩溃。我会尝试象征性的。 【参考方案1】:

UIPopoverController 仍然只适用于 iPad。

来自Apple Documentation:

Popover 控制器专用于 iPad 设备。 尝试在其他设备上创建一个会导致异常。

因此它不适用于 iPhone 设备。可能他们在以前的版本中破坏了某些东西,这就是它对你有用的原因。

【讨论】:

【参考方案2】:

好的,所以我下载了 Xcode 6.0.1,现在一切正常。所以这是 Apple 在 Xcode 6.1 中打破的东西。我以为是在 iOS 8.1 中,因为那是同时发生的。

【讨论】:

以上是关于为啥我的弹出框在 iPhone 6 Plus 上的 iOS 8.1 中崩溃? iOS 8 工作(实际上是 Xcode 6.0 到 6.1 的错误)的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭 iPhone 5 iOS 6 中的弹出框?

UINavigationController 作为 iPhone 上的弹出框?

弹出框在 IPAD 模拟器中透明但在设备中不透明

Bootstrap 3 弹出框在“响应”模式下不起作用

在 iPhone 6 Plus 上关闭 UISplitViewController 弹出框时 UIWebView 被拉伸

iPhone的弹出框控制器[关闭]