gpt4 book ai didi

swift - 为什么这个快速按钮设置会崩溃?

转载 作者:行者123 更新时间:2023-11-28 13:07:29 25 4
gpt4 key购买 nike

我正在尝试以编程方式将按钮及其操作方法添加到 View 。关键是 Action 方法应该与按钮在同一个文件中,这样我就可以将文件放到其他应用程序中。当点击按钮时,我希望执行操作方法,但它却崩溃了。它只是给出没有日志输出的 EXC_BAD_ACCESS。

这是一个简化的测试应用程序,只有两个类:ViewController 和 BlueButton:

import UIKit

class ViewController: UIViewController {

override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let button = BlueButton(mainView: view)
button.installButton()
}
}

class BlueButton: NSObject {

var mainView: UIView

init(mainView: UIView) {
self.mainView = mainView
}

func installButton() {
let button = UIButton(frame: CGRect(x: 25, y: 100, width: 150, height: 50))
button.setTitle("Tap Me", forState: UIControlState.Normal)
button.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
button.addTarget(self, action: "someAction", forControlEvents: .TouchUpInside)
mainView.addSubview(button)
}

func someAction() {
println("this is someAction")
}
}

回溯显示没有任何帮助。它以 objc_msgSend 结尾。我尝试了很多不同的方法来重新排列代码,但没有任何效果。我添加了一个“所有异常”断点,但它没有被击中。我在 someAction 方法上放置了一个断点,只是为了确保它没有被调用——它没有被调用。谁能告诉我发生了什么事?

最佳答案

viewDidAppear 返回时,您的 BlueButton 实例被释放,因为不再有对它的强引用。

点击按钮时,它会尝试引用该实例,但它已被释放,这会导致崩溃。

您可以通过多种方式解决问题。最简单的方法是在 ViewController 类中创建一个属性,并在按钮可见时将 BlueButton 存储在其中。

关于swift - 为什么这个快速按钮设置会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32292868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com