单击模拟器中的按钮会导致应用程序崩溃
Posted
技术标签:
【中文标题】单击模拟器中的按钮会导致应用程序崩溃【英文标题】:Clicking button in Simulator causes app to crash 【发布时间】:2017-05-01 01:13:10 【问题描述】:我试过How do I prompt the user for push notification permission after a button is pushed?,但没用。
由于How do I prompt the user for push notification permission after a button is pushed? 的代码不起作用,我将其删除。应用应该已经恢复正常了吧?
相反,我什至不能再运行它了。在模拟器中单击按钮后,Xcode 显示此错误:
2017-04-30 21:02:21.528 GradientAlarm[63166:7174122]
[GradientAlarm.ViewController allowNotifAction:]: unrecognized selector
sent to instance 0x7a0420b0
2017-04-30 21:02:21.535 GradientAlarm[63166:7174122] *** Terminating app
due to uncaught exception 'NSInvalidArgumentException', reason: '-
[GradientAlarm.ViewController allowNotifAction:]: unrecognized selector
sent to instance 0x7a0420b0'
*** First throw call stack:
(
0 CoreFoundation 0x030b3ded __exceptionPreprocess +
189
1 libobjc.A.dylib 0x0065cd6f objc_exception_throw +
49
2 CoreFoundation 0x031255b8 -[NSObject(NSObject)
doesNotRecognizeSelector:] + 136
3 CoreFoundation 0x03039a8d ___forwarding___ + 941
4 CoreFoundation 0x030396be _CF_forwarding_prep_0 +
14
5 libobjc.A.dylib 0x00672220 -[NSObject
performSelector:withObject:withObject:] + 63
6 UIKit 0x00ad3d90 -[UIApplication
sendAction:to:from:forEvent:] + 91
7 UIKit 0x00ad3d2a -[UIApplication
sendAction:toTarget:fromSender:forEvent:] + 41
8 UIKit 0x00c7bd0b -[UIControl
sendAction:to:forEvent:] + 64
9 UIKit 0x00c7c075 -[UIControl
_sendActionsForEvents:withEvent:] + 469
10 UIKit 0x00c7afab -[UIControl
touchesEnded:withEvent:] + 666
11 UIKit 0x00b4a2ca -[UIWindow
_sendTouchesForEvent:] + 3066
12 UIKit 0x00b4bb8e -[UIWindow sendEvent:]
+ 4445
13 UIKit 0x00af1fe0 -[UIApplication
sendEvent:] + 363
14 UIKit 0x0136e16f
__dispatchPreprocessedEventFromEventQueue + 2973
15 UIKit 0x0136563f __handleEventQueue +
1255
16 UIKit 0x01366ba3
__handleHIDEventFetcherDrain + 66
17 CoreFoundation 0x03058a5f
__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
18 CoreFoundation 0x0303e1c4 __CFRunLoopDoSources0 +
500
19 CoreFoundation 0x0303d69c __CFRunLoopRun + 1084
20 CoreFoundation 0x0303cfd4 CFRunLoopRunSpecific +
372
21 CoreFoundation 0x0303ce4b CFRunLoopRunInMode + 123
22 GraphicsServices 0x04d58a7a GSEventRunModal + 71
23 GraphicsServices 0x04d5895f GSEventRun + 80
24 UIKit 0x00ad1cb9 UIApplicationMain + 148
25 GradientAlarm 0x0008cbab main + 75
26 libdyld.dylib 0x03f16779 start + 1)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
我不知道为什么会这样。我删除了我添加的信息并打开了一个新项目,我从中复制并粘贴了所有默认值,但我仍然收到相同的错误消息。
【问题讨论】:
选择器指向的函数是否被删除,因为它是这么说的 尝试删除并重新连接那个按钮IBAction
函数。
抱歉,您的标题很不准确。它显然没有“因为一个按钮”而中断。当您弄清楚发生了什么时,请考虑更改标题以反映它。话虽如此,一个想法 - 你给你的项目命名了吗?是 Xcode(或模拟器)的派生数据吗?
@shearos 你是说按下该按钮时用来运行的功能已被删除?确实如此,但是该功能会引起问题,因此将其放回去也不是很有用。我只是想回到我添加该功能之前的时间。最重要的是,我将主故事板复制并粘贴到一个全新的 Xcode 项目中,在该项目中我没有添加任何代码,我得到了同样的错误。我从来没有在这个项目中写过那个函数,所以在这个项目中这个函数从未被删除。
@RAJAMOHAN-S 当我尝试这样做时,Xcode 有点僵住了。它不会让我在视图控制器中编辑代码,但会让我在其他地方编辑代码。
【参考方案1】:
您可能仍然在 .xib 或故事板视图控制器中引用了 allowNotifAction:
。
转到界面构建器(.xib 或故事板)选择视图控制器并确保没有对该方法的引用。
【讨论】:
我将主情节提要复制并粘贴到一个全新的 Xcode 项目中,在该项目中我没有更改任何代码,但我得到了同样的错误。 (我只是想在添加任何代码之前看看该按钮是否会再次工作。)在那个我什至没有触及其代码的新项目中,我很确定在任何地方都没有对 allowNotifAction 的引用。当我查看新项目中存在的任何代码时,它只是所有的默认值。 您是否将allowNotifAction
指定为代码#selector()
中的选择器?
这不是问题所在。我在 15 小时前回答了我的问题,但感谢您的回复和帮助!
所以我的答案是真正的解决方案......你应该将问题标记为已解决【参考方案2】:
这个问题的答案很简单。控制台的错误消息不是很有帮助,但我环顾四周,意识到我已经将同一个按钮链接到 View Controller 两次,并且即使在我删除 View Controller 中的相应编程块之后,该按钮仍然链接到某物。我只需要右键单击故事板中的按钮并将其删除。
愚蠢的错误。感谢大家的回复!
【讨论】:
感谢@dava 这个解决方案!我只是将我的答案标记为正确的答案,因为我不理解 dava 的答案(作为我的极端初学者),我希望将来查找此问题的任何人都能找到最简单的语言,可能的简化解释.感谢所有回答的人。以上是关于单击模拟器中的按钮会导致应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章