UIButton导致(lldb)错误与EXC_BAD_ACCESS

时间:2015-05-20 20:19:09

标签: ios swift uibutton uikit

我在SO上多次看过这个问题,但这些问题的解决方案并没有解决我的问题。

我动态创建一个UIButton并将其添加到我的视图中。我在按钮上添加了一个目标,这是一个功能。

目标函数运行(即print语句运行),然后我在控制台中看到(lldb)错误,异常断点突出显示AppDelegate.swift的class AppDelegate: UIResponder, UIApplicationDelegate行,错误为{{1应用程序崩溃了。

我知道这通常是由选择器错误引起的(即冒号表示接受参数的函数),但我已尝试过冒号和无冒号的所有变种,但无济于事。

感谢任何帮助

来源:

EXC_BAD_ACCESS (code=1, address=x020000000c)

我从项目中获取相关代码并将其放在一个空白项目中,错误仍然存​​在。

1 个答案:

答案 0 :(得分:2)

编辑:

看起来init是Swift在桥接ObjC代码时使用的特殊关键字。来自文档:

  

初​​始化

     

要在Swift中实例化一个Objective-C类,你可以调用其中的一个   使用Swift语法的初始化程序。当Objective-C init方法到来时   转到Swift,它们采用原生的Swift初始化语法。该   “init”前缀被切掉并成为一个关键字来表示   该方法是初始化

因此,如果您将代码更改为类似下面的内容,则可以使用。

感谢@cedabob的参考:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-XID_26

class ViewController: UIViewController {

        var loginButton: UIButton!

        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.

            self.loginButton = UIButton()
            self.loginButton.frame = CGRectMake(10, 40, self.view.bounds.width - 20, 40)
            self.loginButton.setTitle("Login", forState: UIControlState.Normal)
            self.loginButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)

            self.view.addSubview(self.loginButton)

            self.loginButton.addTarget(self, action: "login:", forControlEvents:.TouchUpInside)
        }

        func login(button: UIButton)
        {
            println("Logging in...")
        }

        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }