添加按钮以转到新视图并收到此错误 -[ViewController setData:]: unrecognized selector sent to instance 0x7f962ae90cf0

Posted

技术标签:

【中文标题】添加按钮以转到新视图并收到此错误 -[ViewController setData:]: unrecognized selector sent to instance 0x7f962ae90cf0【英文标题】:Adding button to go to new View and get this error -[ViewController setData:]: unrecognized selector sent to instance 0x7f962ae90cf0 【发布时间】:2016-05-10 16:44:16 【问题描述】:

我已经有两个 ViewController,但我想添加另一个……但由于某种原因,我不断收到以下错误。我没有添加任何代码,但我正在以图形方式添加一个 IBAction 以从 ViewController 转到 ViewController3。

2016-05-10 12:26:35.259 App-Title[26519:525203] -[ViewController3 setData:]: unrecognized selector sent to instance 0x7f962ae90cf0
2016-05-10 12:26:35.300 App-Title[26519:525203] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController3 setData:]: unrecognized selector sent to instance 0x7f962ae90cf0'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010a8eed85 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010a055deb objc_exception_throw + 48
    2   CoreFoundation                      0x000000010a8f7d3d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x000000010a83dcfa ___forwarding___ + 970
    4   CoreFoundation                      0x000000010a83d8a8 _CF_forwarding_prep_0 + 120
    5   App-Title                           0x0000000109b43c85 -[ViewController prepareForSegue:sender:] + 149
    6   UIKit                               0x000000010bab45d5 -[UIStoryboardSegueTemplate _performWithDestinationViewController:sender:] + 369
    7   UIKit                               0x000000010bab4433 -[UIStoryboardSegueTemplate _perform:] + 82
    8   UIKit                               0x000000010bab46f7 -[UIStoryboardSegueTemplate perform:] + 156
    9   UIKit                               0x000000010b36ea8d -[UIApplication sendAction:to:from:forEvent:] + 92
    10  UIKit                               0x000000010b4e1e67 -[UIControl sendAction:to:forEvent:] + 67
    11  UIKit                               0x000000010b4e2143 -[UIControl _sendActionsForEvents:withEvent:] + 327
    12  UIKit                               0x000000010b4e1263 -[UIControl touchesEnded:withEvent:] + 601
    13  UIKit                               0x000000010b3e199f -[UIWindow _sendTouchesForEvent:] + 835
    14  UIKit                               0x000000010b3e26d4 -[UIWindow sendEvent:] + 865
    15  UIKit                               0x000000010b38ddc6 -[UIApplication sendEvent:] + 263
    16  UIKit                               0x000000010b367553 _UIApplicationHandleEventQueue + 6660
    17  CoreFoundation                      0x000000010a814301 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    18  CoreFoundation                      0x000000010a80a22c __CFRunLoopDoSources0 + 556
    19  CoreFoundation                      0x000000010a8096e3 __CFRunLoopRun + 867
    20  CoreFoundation                      0x000000010a8090f8 CFRunLoopRunSpecific + 488
    21  GraphicsServices                    0x000000010f3ccad2 GSEventRunModal + 161
    22  UIKit                               0x000000010b36cf09 UIApplicationMain + 171
    23  App-Title                           0x0000000109b4a6ff main + 111
    24  libdyld.dylib                       0x000000010d79092d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

【问题讨论】:

您能展示一些代码以及您是如何使用 segue 推送视图控制器的吗?我敢打赌,问题来自 Segue 过渡。 您将视图控制器中的数据属性设置为错误的值,导致应用程序崩溃 @Mj.B 我没有写任何代码,我在storyboard中创建了按钮,右键单击并药物到ViewController3,并选择了modal。 @AhmadIshfaq 我没有以编程方式设置数据属性,您能否发布一个示例说明如何执行此操作? (将其作为答案发布,因此如果可行,我可以接受您的答案。 prepareForSegue: 方法中的代码发布到ViewController 【参考方案1】:

您是否使用 ViewController3 的对象从您的代码某处调用了名为 setData 的方法?...错误意味着您正在调用特定类中不存在的方法...尝试在您的项目中搜索 setData。 ..检查它是否已使用 ViewController3 的对象调用...希望它有所帮助... :)

【讨论】:

我没有写任何代码,我在storyboard中创建了按钮,右键点击并药物到ViewController3,并选择了modal。我可以使用快速搜索功能来找到它吗? 在整个项目中使用 command+shift+f 和搜索方法'setData'...检查对该方法的调用...我在开发应用程序时处理了这个错误...您可能正在使用 ViewController3 的对象调用“setData”...或者这可能正在发生***.com/questions/2455161/… “项目中的“setData”没有结果”出现在我的搜索中【参考方案2】:

如果您设置了 IBAction,则决定仅通过从视图控制器中删除代码或通过更改自动生成的 IBAction 代码来更改视图控制器中的方法名称来删除它:

@IBAction func setData(sender: AnyObject) print("Button pressed...")

你会遇到这个崩溃。

原因是当你的视图控制器被创建时你告诉它选择器setData(sender: AnyObject) 存在。如果您从视图控制器中删除或更改该代码而不删除情节提要中的引用,则会由于未定义的选择器而崩溃。

我怀疑您在某些时候使用setData 方法创建了一个IBAction,并在视图控制器中删除或更改了它的名称。

解决这个问题:

1) 右键单击​​情节提要中的按钮(或添加 IBAction 的任何内容)控制器。

2) 在弹出的视图中查找 setData: 方法。

3) 单击方法名称旁边的 x。这将从情节提要中删除 IBAction。

【讨论】:

我删除了这个,然后又重新添加了它,但我仍然看到崩溃。我唯一做的就是右键单击并在将模态拖动到目标 ViewController 时选择模态。我应该选择“Touch Up Inside”吗? 不幸的是,这不太可能是您的问题。道歉!您是否,或者您是否随时有 setData 方法或 IBAction?还是称为数据的属性? 别担心,我很感谢我能得到的任何帮助!是的,我认为(知道)我走得太快了,我相信我添加了对 IBAction 的重复引用。我添加了 View Controller 并开始布局,然后右键单击 ViewController 1 上的按钮>将其添加到 ViewController3>选定的模式。然后我对 ViewController3 中添加的按钮返回 ViewController 执行相同操作。在查看了一些代码后的一段时间,我将按钮作为 IBAction 放入 ViewController.h(以及添加 UIbutton 声明),并对 ViewController3.h 上的按钮执行相同操作。 好吧,为了加快速度,我删除了所有 .h 引用并删除了所有 Button 发送事件,以确保我没有破坏我的应用程序......但每当我尝试重新添加模态操作,它仍然会因相同的错误而崩溃。 如果您在问题中发布来自视图控制器的代码,它可能会有所帮助。特别是在您声明属性和任何 prepareForSegue / performSegue 方法的任何地方。即使您仅在情节提要中执行此操作,也可能存在一些问题导致此问题。

以上是关于添加按钮以转到新视图并收到此错误 -[ViewController setData:]: unrecognized selector sent to instance 0x7f962ae90cf0的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮以转到从 Spinner 选择的下一个活动时出错

返回上一个窗口

ExtJs 按钮“单击”侦听器以转到类方法

kivy 按钮按下以转到多个屏幕之一

导航抽屉,处理后退按钮以转到以前的片段?

播放视频时的 CALayer 消息(Xcode 12.5.1,Swift 5)