为啥我的弹出框在 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 的错误)的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController 作为 iPhone 上的弹出框?
在 iPhone 6 Plus 上关闭 UISplitViewController 弹出框时 UIWebView 被拉伸