在使用UIButton发件人的@IBAction之后,Swift应用程序崩溃(lldb)仅作为调试输出

时间:2015-06-03 02:24:03

标签: ios swift

我在研究之后看到这个特定的调试输出并不是非常罕见,但原因可能差别很大。我是iOS开发的新手,并且一直试图找出应用程序崩溃的原因,但无法破解它。我将提供许多不同的代码片段,因为我只是预感到实际上是什么错误。

我部分跟随this video tutorial for a ToDo list,但在某些方面有所不同。最值得注意的是,我选择不使用选项卡式应用程序模板,而是查找放松视图的方法。

以下是您创建教程的简单对象管理器类:

import UIKit

var rmndrMgr = ReminderManager()

struct reminder {
    var name = "none"
    var description = "none"
}

class ReminderManager: NSObject {

    var reminders = [reminder]()

    func addReminder(name: String, description: String) {
        reminders.append(reminder(name: name, description: description))
    }
}

以下是我的第一个视图控制器:

import UIKit

@objc(ToDoListTableViewController)
class ToDoListTableViewController: UITableViewController, UITableViewDelegate, UITableViewDataSource {

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

    @IBAction func unwindToList(segue:UIStoryboardSegue){
//        var source = segue.sourceViewController
//            as AddToDoItemViewController
//        var item: ToDoItem? = source.toDoItem
//        if item != nil {
//            self.toDoItems.addObject(item)
//            self.tableView.reloadData()
//        }
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return rmndrMgr.reminders.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Default")

        cell.textLabel!.text = rmndrMgr.reminders[indexPath.row].name

        cell.detailTextLabel!.text = rmndrMgr.reminders[indexPath.row].description

        return cell
    }
}

第二个视图控制器:

import UIKit

class AddToDoViewController: UIViewController {

    @IBOutlet var textReminder: UITextField!
    @IBOutlet var textDescription: UITextField!       

    //Events
    @IBAction func addReminder_click(sender: UIButton) {

    }


    //Touch Functions

    //UITextFieldDelegate
    //"first responder" is the keyboard. resign it when user presses return key
    //basically gets rid of the keyboard when user submit
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        self.view.endEditing(true)

        println("clicked out")
    }
}

这就是我的“添加”视图实际上是这样的: [已删除,因为我没有发布图片的声誉] imgur link instead

我在视图顶部有UIBarButtonItems的导航栏。现在,“关闭”和“完成”按钮(位于导航栏中)执行相同的操作:将用户展开回主列表。理想情况下,“提交”按钮(不在导航栏中,只在普通屏幕上)会将用户键入的内容添加到将在另一个视图中显示的数组中。 “完成”按钮可能会被删除或重构。

当前的行为是,当我单击“提交”按钮时,应用程序会与(lldb)的调试文本一起崩溃,无论它的动作函数内部是什么代码。我有理由相信它是正确连接的,因为我已经尝试写出函数签名和Control - 从按钮拖动到代码来生成它。

我认为问题在于导航栏,因为这些是从不同的ToDo列表教程中提取的。但是,我无法获得足够描述性的日志来真正了解原因或找出解决方法。如果需要,我很乐意从我的Xcode发布更多信息,所以请你问一下。如果有人能帮助我找出错误并从中吸取教训,我将非常感激。

2 个答案:

答案 0 :(得分:4)

我打赌你在XCode编辑器中添加了一个断点。尝试点击“继续”进入“lldb”显示的控制台。如果是运行时错误,您会看到错误消息。

蓝色箭头是一个断点供参考。 enter image description here

答案 1 :(得分:1)

@objc(ToDoListTableViewController) 

为什么会这样?您是否尝试使用CoreData? 右键单击按钮,查看链接的位置。