gpt4 book ai didi

ios - 试图用未知的演示者解雇 UIAlertController

转载 作者:IT王子 更新时间:2023-10-29 08:16:31 25 4
gpt4 key购买 nike

我的应用程序崩溃了,一定是因为 UIAlertController。

此问题仅发生在 UIAlertController 可用的 iOS 8.x 上。奇怪的是,我的应用程序既不使用 UIAlertViewController 也不使用 UIAlertView

报告告诉我:

Trying to dismiss UIAlertController <UIAlertController: 0x172c5d80> with unknown presenter.

这怎么会发生?

我想过

  1. 撤消由于摇动手势而显示的系统 AlertView
  2. 当提示或通用对话框仍在屏幕上时 WebView 被释放
  3. 低电量提醒

但这些案例中没有一个让我崩溃。

崩溃日志告诉我的事实是,操作系统显示了一个将附加到我的应用程序窗口的 AlertView,并且在某些情况下会松开显示 UIAlertViewController 的父 View Controller 。

有什么想法可以找到问题吗?

这里是堆栈跟踪

_________________________________
0 CoreFoundation 0x2bc0c45f __exceptionPreprocess + 127
1 libobjc.A.dylib 0x39c79c8b objc_exception_throw + 36
2 CoreFoundation 0x2bc0c3a5 +[NSException raise:format:] + 110
3 UIKit 0x2f4ad13d -[UIAlertController _dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:] + 414
4 UIKit 0x2f4acf97 -[UIAlertController _dismissAnimated:triggeringAction:] + 28
5 UIKit 0x2f590a0b -[_UIAlertControllerActionView touchesEnded:withEvent:] + 160
6 UIKit 0x2f159567 -[UIWindow _sendTouchesForEvent:] + 520
7 UIKit 0x2f152e31 -[UIWindow sendEvent:] + 542
8 UIKit 0x2f129759 -[UIApplication sendEvent:] + 194
9 UIKit 0x2f39d2f9 _UIApplicationHandleEventFromQueueEvent + 14166
10 UIKit 0x2f1281a9 _UIApplicationHandleEventQueue + 1350
11 CoreFoundation 0x2bbd2fbf __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 12
12 CoreFoundation 0x2bbd23cf __CFRunLoopDoSources0 + 216
13 CoreFoundation 0x2bbd0a35 __CFRunLoopRun + 770
14 CoreFoundation 0x2bb1e3b1 CFRunLoopRunSpecific + 474
15 CoreFoundation 0x2bb1e1c3 CFRunLoopRunInMode + 104
16 GraphicsServices 0x3308d201 GSEventRunModal + 134
17 UIKit 0x2f18843d UIApplicationMain + 1438
18 MyApp 0x00028a07 main (main.mm:16)

编辑

holes 询问我的窗口初始化。这是我的 AppDelegate 的代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[MyAppCustomWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

_mainViewController = [[MyAppContainerViewController alloc] initWithNibName:nil bundle:nil];
_mainStatusBarVC = [[MyAppStatusBarVC alloc] initWithRootVC:_mainViewController];

[self.window setRootViewController:_mainStatusBarVC];
[self.window makeKeyAndVisible];

return YES;
}

最佳答案

我敢打赌你的崩溃发生在 iPad 上。

在 iPad 上,从 iOS8 开始,UIActionSheet 似乎由 UIAlertController 处理

有了这段代码,

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
if(buttonIndex == 1) return; // Cancel button

[self doSomeViewControllerDismisses];
}

我的应用程序崩溃并出现与您遇到的相同的错误。
为了防止这种情况,我只是在下一次 MainThread 执行时调度复杂的关闭调用,为隐藏的 UIAlertViewController 提供正确释放的机会。

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
if(buttonIndex == 1) return; // Cancel button

dispatch_async(dispatch_get_main_queue(), ^{
[self doSomeViewControllerDismisses];
});
}

关于ios - 试图用未知的演示者解雇 UIAlertController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29649223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com