【发布时间】:2015-10-17 03:25:52
【问题描述】:
我最近开始将我的应用程序更新到 Swift 2.0,但我遇到了一个问题,在 SO 上有一百个不同的答案,但似乎都与我的问题无关。
(这在将应用程序更新到 Swift 2.0 之前有效),但我无法找到对点击手势识别器所做的任何更改?
这是我得到的完整错误:
[Stocks.SidePanelViewController proFormulaTapGesture]:无法识别的选择器发送到实例 0x14f06ae00
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Stocks.SidePanelViewController proFormulaTapGesture]:无法识别的选择器发送到实例 0x14f06ae00”
*** 首先抛出调用堆栈: (0x1830904d0 0x197afff9c 0x1830971ec 0x183094188 0x182f9920c 0x188c3c58c 0x188899b50 0x18872d104 0x188c3bc30 0x1886ed28c 0x1886eb3ac 0x18872b088 0x18872a5ec 0x1886fb908 0x1886f9fac 0x183047d6c 0x183047800 0x183045500 0x182f75280 0x18e0ec0cc 0x188762df8 0x100158184 0x1983428b8) libc++abi.dylib:以 NSException 类型的未捕获异常终止
这是一个简单的点击手势。但它似乎不再识别选择器了。
这是我用来设置识别器的代码:
let proFormulaTap = UITapGestureRecognizer()
proFormulaTap.addTarget(self, action:"proFormulaTapGesture")
proFormulaView.addGestureRecognizer(proFormulaTap)
这是我要运行的函数:
func proFormulaTapGesture() throws {
print("proFormulaTapGesture")
selectView(proFormulaView)
selectedMenuItem = 0
Formula = 1
menuTabBarController.selectedIndex = 0
navigationController?.navigationBar.topItem!.title = "BASIC FORMULA"
try (menuTabBarController.viewControllers as! [SuggestionsViewController])[0].loadSuggestions()
}
但是,因为它从不在控制台中打印“proFormulaTapGesture”。我绝对认为错误发生在函数之前。提到选择器的错误也暗示了这一点。
很明显,自从更新到 Swift 2.0 后,函数中已经添加了 try/catch,但是在 tapGestureRecognizer 的设置中没有任何改变。
我尝试删除“抛出”并尝试从函数中,但问题仍然存在。我还尝试制作一个按钮而不是点击手势识别器。但是我仍然遇到同样的错误,这表明它可能是选择器(功能)而不是点击手势/按钮的问题。但是我的应用程序中的所有其他按钮都可以正常工作吗?
我还尝试重命名选择器/功能和点击手势识别器。还是一样。
原始代码是用 Swift 编写的,而不是 Obj-C。 throws 和 try 是在 Apple 代码转换为 Swift 2.0 期间添加的
任何帮助解决为什么突然被破坏将不胜感激。
谢谢!
【问题讨论】:
-
您是否只是尝试评论该 try 语句并删除该“抛出” - 只是为了检查是否是导致问题的原因?
-
@nshebbar 我刚试过,还是一样的错误。不过还是谢谢你的建议!真的很感激!
-
嗯,好的,也试试改函数名。
-
@nshebbar 我刚刚更新了我的帖子,并尝试修复它。是的:(
-
尝试完全限定的函数,该函数也接受gestureRecogniser作为参数:func proFormulaTapGesture(recognizer: UITapGestureRecognizer) throws。并匹配 - proFormulaTap.addTarget(self, action:"proFormulaTapGesture:")
标签: swift swift2 ios9 xcode7-beta4