UITapGestureRecognizer 崩溃应用程序..?
UITapGestureRecognizer Crashes App..?
我正在使用图像视图来显示用户的好友列表。用户应该能够点击朋友的图标并被带到另一个屏幕。我编写的代码在 Xcode 模拟器上运行完美。但是,当 运行 在设备上时,每次我点击图标时,应用程序都会崩溃。
我真的不确定从哪里开始调试它,即使经过大量 google-ing 之后。任何建议/帮助表示赞赏。
我读到我的特定错误可能与内存分配有关(?),但仍然不确定从哪里开始/该做什么。当我检查我的设备日志时,异常类型显示如下:异常类型:EXC_BAD_ACCESS (SIGSEGV)。我已经按照有关寻找僵尸的教程进行操作,但没有帮助。谢谢你。
我不太确定 post 的代码是什么,但由于您可能想确保我正确设置了图标:(我删除了一些代码以保持简单可能;这是 运行 在循环中创建 x 个图标)
let iv = UIImageView()
iv.translatesAutoresizingMaskIntoConstraints = false
iv.image = image!
iv.tag = j
iv.isUserInteractionEnabled = true
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.iconTapped))
iv.isUserInteractionEnabled = true
iv.addGestureRecognizer(tapGestureRecognizer)
iconTapped 函数:
func iconTapped(gestureRecognizer: UITapGestureRecognizer, _ sender: AnyObject) {
print("TAPPED NUMBER: \(gestureRecognizer.view?.tag)")
tappedIcon = CurrentSixFriendsList[(gestureRecognizer.view?.tag)!]
let nextVC = ConfirmOpponentViewController()
nextVC.chosenOpponent = tappedIcon
navigationController?.pushViewController(nextVC, animated: true)
}
更新:
除了 print 语句外,我已经注释掉了 nextVC 上的所有代码和 iconTapped 中的所有代码。仅当我点击任何朋友图标时,该应用程序仍然在设备上崩溃。
func iconTapped(gestureRecognizer: UITapGestureRecognizer, _ sender: AnyObject) {
print("tapped")
}
第二次更新:
所以我注释掉了所有用于渲染图像视图的代码,并对图像视图进行了硬编码。 (只有一个图像视图)带有我项目中的静态图像。即使我点击此 imageView,图像视图也会显示并且应用程序会崩溃。为什么表现得这么奇怪!?我要疯了...
我在 VDL 中添加这段代码只是为了实验:
let iv = UIImageView()
iv.isUserInteractionEnabled = true
iv.translatesAutoresizingMaskIntoConstraints = false
iv.image = #imageLiteral(resourceName: "settings icon")
view.addSubview(iv)
iv.widthAnchor.constraint(equalToConstant: 100).isActive = true
iv.heightAnchor.constraint(equalToConstant: 100).isActive = true
iv.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
iv.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(iconTapped))
iv.addGestureRecognizer(tapGestureRecognizer)
很可能你的 CurrentSixFriendsList 没有 gestureRecognizer.view?.tag) 的值!但是在这一行之前有一个断点
tappedIcon = CurrentSixFriendsList[(gestureRecognizer.view?.tag)!]
即便如此,如果您没有收到错误,那么安装 crashlytics.This 是一个可以告诉您崩溃问题的工具。
终于找到崩溃的原因了。
您点击的函数:
func iconTapped(gestureRecognizer: UITapGestureRecognizer, _ sender: AnyObject) {
print("tapped")
}
应该是这样的:
func iconTapped(gesture: UITapGestureRecognizer) {
// To get the sender's tag, do this:
print(gesture.view.tag)
}
同时将#selector 调整为正确的功能。
将选择器设置为 UITapGestureRecognizer
时,识别器对象将仅使用发送者调用选择器,您不能向该函数添加其他参数。
所以,崩溃的根本原因是因为您试图将一个带有一个参数(这是手势发出的)的方法放入一个带有两个参数的方法中。这次崩溃非常有趣,因为它在模拟器上运行良好,但只在实际设备中崩溃。我猜这是因为模拟器和设备处理带有额外参数的功能不同? (模拟器忽略它与设备崩溃)。如果您能更深入地了解为什么会发生这种情况,我很想知道。
替换您的点击手势代码 & 从 swift 3.x 您需要使用 #selector
let tapGesture = UITapGestureRecognizer.init(target: self, action: #selector(dismissKeyboard))
self.view.addGestureRecognizer(tapGesture)
@objc func dismissKeyboard(gesture: UITapGestureRecognizer) {
view.endEditing(true)
}
我正在使用图像视图来显示用户的好友列表。用户应该能够点击朋友的图标并被带到另一个屏幕。我编写的代码在 Xcode 模拟器上运行完美。但是,当 运行 在设备上时,每次我点击图标时,应用程序都会崩溃。
我真的不确定从哪里开始调试它,即使经过大量 google-ing 之后。任何建议/帮助表示赞赏。
我读到我的特定错误可能与内存分配有关(?),但仍然不确定从哪里开始/该做什么。当我检查我的设备日志时,异常类型显示如下:异常类型:EXC_BAD_ACCESS (SIGSEGV)。我已经按照有关寻找僵尸的教程进行操作,但没有帮助。谢谢你。
我不太确定 post 的代码是什么,但由于您可能想确保我正确设置了图标:(我删除了一些代码以保持简单可能;这是 运行 在循环中创建 x 个图标)
let iv = UIImageView()
iv.translatesAutoresizingMaskIntoConstraints = false
iv.image = image!
iv.tag = j
iv.isUserInteractionEnabled = true
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.iconTapped))
iv.isUserInteractionEnabled = true
iv.addGestureRecognizer(tapGestureRecognizer)
iconTapped 函数:
func iconTapped(gestureRecognizer: UITapGestureRecognizer, _ sender: AnyObject) {
print("TAPPED NUMBER: \(gestureRecognizer.view?.tag)")
tappedIcon = CurrentSixFriendsList[(gestureRecognizer.view?.tag)!]
let nextVC = ConfirmOpponentViewController()
nextVC.chosenOpponent = tappedIcon
navigationController?.pushViewController(nextVC, animated: true)
}
更新: 除了 print 语句外,我已经注释掉了 nextVC 上的所有代码和 iconTapped 中的所有代码。仅当我点击任何朋友图标时,该应用程序仍然在设备上崩溃。
func iconTapped(gestureRecognizer: UITapGestureRecognizer, _ sender: AnyObject) {
print("tapped")
}
第二次更新: 所以我注释掉了所有用于渲染图像视图的代码,并对图像视图进行了硬编码。 (只有一个图像视图)带有我项目中的静态图像。即使我点击此 imageView,图像视图也会显示并且应用程序会崩溃。为什么表现得这么奇怪!?我要疯了... 我在 VDL 中添加这段代码只是为了实验:
let iv = UIImageView()
iv.isUserInteractionEnabled = true
iv.translatesAutoresizingMaskIntoConstraints = false
iv.image = #imageLiteral(resourceName: "settings icon")
view.addSubview(iv)
iv.widthAnchor.constraint(equalToConstant: 100).isActive = true
iv.heightAnchor.constraint(equalToConstant: 100).isActive = true
iv.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
iv.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(iconTapped))
iv.addGestureRecognizer(tapGestureRecognizer)
很可能你的 CurrentSixFriendsList 没有 gestureRecognizer.view?.tag) 的值!但是在这一行之前有一个断点
tappedIcon = CurrentSixFriendsList[(gestureRecognizer.view?.tag)!]
即便如此,如果您没有收到错误,那么安装 crashlytics.This 是一个可以告诉您崩溃问题的工具。
终于找到崩溃的原因了。
您点击的函数:
func iconTapped(gestureRecognizer: UITapGestureRecognizer, _ sender: AnyObject) {
print("tapped")
}
应该是这样的:
func iconTapped(gesture: UITapGestureRecognizer) {
// To get the sender's tag, do this:
print(gesture.view.tag)
}
同时将#selector 调整为正确的功能。
将选择器设置为 UITapGestureRecognizer
时,识别器对象将仅使用发送者调用选择器,您不能向该函数添加其他参数。
所以,崩溃的根本原因是因为您试图将一个带有一个参数(这是手势发出的)的方法放入一个带有两个参数的方法中。这次崩溃非常有趣,因为它在模拟器上运行良好,但只在实际设备中崩溃。我猜这是因为模拟器和设备处理带有额外参数的功能不同? (模拟器忽略它与设备崩溃)。如果您能更深入地了解为什么会发生这种情况,我很想知道。
替换您的点击手势代码 & 从 swift 3.x 您需要使用 #selector
let tapGesture = UITapGestureRecognizer.init(target: self, action: #selector(dismissKeyboard))
self.view.addGestureRecognizer(tapGesture)
@objc func dismissKeyboard(gesture: UITapGestureRecognizer) {
view.endEditing(true)
}