添加第二个操作时,UIAlertController崩溃(SIGABRT)。

5

最近几天,我在我的一款应用程序中发现了一种非常奇怪的行为。当我添加第二个操作时,UIAlertController就会崩溃。以下是代码>

let alertController = UIAlertController.init(title: title, message: message, preferredStyle: .Alert)

for  action in actions
{
    alertController.addAction(action)
}

actions是一个包含UIAlertAction元素的数组,在我的情况下是2个。我已经尝试重新排序这些操作,以查看特定的UIAlertAction对象是否存在问题,但是不行,当添加第二个操作时,应用程序总是崩溃。我是这样创建它们的:

let cancelAction = UIAlertAction.init(title: "Cancel", style: .Cancel)
{ (action:UIAlertAction!) -> Void in
    print("User cancelled action");
}

编辑:以下是我创建该数组的方法:

showAlertView("Proceed", message: proceedMessage, actions: [cancelAction, proceedAction])

大部分代码来自Apple的教程,只有一些小改动。调试器立即跳转到class AppDelegate: ...这一行,没有其他信息,只有SIGABRT,在崩溃日志中我看到了这个:

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

Filtered syslog:
None found

Last Exception Backtrace:
0   CoreFoundation                  0x1832c6db0 __exceptionPreprocess + 124
1   libobjc.A.dylib                 0x18292bf80 objc_exception_throw + 56
2   CoreFoundation                  0x1832c6c80 +[NSException raise:format:arguments:] + 108
3   Foundation                      0x183c4c154 -[NSAssertionHandler   handleFailureInMethod:object:file:lineNumber:description:] + 112
4   UIKit                           0x188897c24 -[UIAlertController addAction:] + 220
5   MyApp                           0x10007bb60 0x10006c000 + 64352
6   MyApp                           0x10007b648 0x10006c000 + 63048
7   MyApp                           0x10007929c 0x10006c000 + 53916
8   MyApp                           0x100079554 0x10006c000 + 54612
9   UIKit                           0x1886de1a8 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] + 2676
10  UIKit                           0x1886cbf84 -[UIApplication workspace:didReceiveActions:] + 136
11  FrontBoardServices              0x184c677ac __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 36
12  FrontBoardServices              0x184c67618 -[FBSSerialQueue _performNext] + 168
13  FrontBoardServices              0x184c679c8 -[FBSSerialQueue _performNextFromRunLoopSource] + 56
14  CoreFoundation                  0x18327d09c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
15  CoreFoundation                  0x18327cb30 __CFRunLoopDoSources0 + 540
16  CoreFoundation                  0x18327a830 __CFRunLoopRun + 724
17  CoreFoundation                  0x1831a4c50 CFRunLoopRunSpecific + 384
18  GraphicsServices                0x184a8c088 GSEventRunModal + 180
19  UIKit                           0x18848e088 UIApplicationMain + 204
20  MyApp                           0x10007d984 0x10006c000 + 72068
21  libdyld.dylib                   0x182d428b8 start + 4

有人有什么想法吗?最奇怪的是,这段代码几天前还可以使用。由于我在从Yosemite升级到El Capitan后遇到了很多Xcode 7.3的问题(基本上几乎无法使用且经常崩溃),所以我最近重新安装了它。但是代码是一样的...

最好的问候 Bjoern


为什么在操作中使用for循环? - Iyyappan Ravi
2
你应该展示如何创建actions数组。 - Code
你尝试过在构建之前运行清理吗?我曾经遇到过这样的情况,由于某些原因,一些代码片段在更改后没有被重新编译,导致了这种崩溃。 - JeremyP
@Phillip 很遗憾,Objective-C断点没有提供更多信息。实际上,调试器在.addAction行处停止三次,然后显示SIGABRT。@JeremyP 我进行了清除操作以及卸载和重新安装应用程序。到目前为止仍然没有起作用。 - bjoernb
@IyyappanRavi 我使用一个函数来动态创建UIAlertController,所以我不知道会有多少个actions。但是即使我直接调用addAction()而不使用循环,应用程序在第二个addAction调用时也会崩溃。 - bjoernb
显示剩余2条评论
1个回答

11

我的猜测是你在超过1个操作上设置了style: .Cancel


是的,这就是问题的原因。这个有文档记录吗? - bjoernb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接