CoreData TextField - 意外发现 nil

Posted

技术标签:

【中文标题】CoreData TextField - 意外发现 nil【英文标题】:CoreData TextField - unexpectedly found nil 【发布时间】:2015-05-02 11:14:29 【问题描述】:

我正在使用 Tableview 中的 CoreData 和文本字段进行应用程序。在情节提要中,我有一个文本字段。 textfield 将在应用程序中使用不同的内容乘以五倍。在导航栏中,我有一个按钮,可以保存您的书面数据。但是当我按下保存按钮时,应用程序崩溃并出现错误

IBOutlet 在 TableViewCell.swift 中。图片中的代码:

    @IBAction public func saveTapped()

        if activeTextField.text.isEmpty 
            let alert = UIAlertView()
            alert.title = "Nevyplnené údaje"
            alert.message = "Musíš vyplniť všetky údaje o knihe."
            alert.addButtonWithTitle("Ok")
            alert.show()


        
        let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let obsah: NSManagedObjectContext = appDel.managedObjectContext!
        let entity = NSEntityDescription.entityForName("List", inManagedObjectContext: obsah)
        var pridat = Model(entity: entity! , insertIntoManagedObjectContext: obsah)

        pridat.kniha = activeTextField.text
        pridat.autor = activeTextField.text
        pridat.rok = activeTextField.text
        pridat.vydavatelstvo = activeTextField.text
        pridat.strany = activeTextField.text

        obsah.

这里是完整的代码:

http://pastebin.com/6LHqJW0w

这是 TableViewCell 代码:

http://pastebin.com/RAYTUcp6

我也试过了

    let mfv = TableViewCell()

        if mfv.textField.text.isEmpty 
        let alert = UIAlertView()
        alert.title = "Nevyplnené údaje"
        alert.message = "Musíš vyplniť všetky údaje o knihe."
        alert.addButtonWithTitle("Ok")
        alert.show()
    

【问题讨论】:

如果您需要 SO 用户的帮助,请!花时间输入您的代码。图像难以阅读且不必要。此外,如果有人确实希望在发布答案之前对您的问题进行测试,他们就无法复制您的代码。 对不起人 :X 已编辑:) 调试var activeTextField: UITextField!的值我怀疑你的UITextField is nil(因为text属性不能为nil,.isEmpty也不能) 检查activeTextField的IBOutlet是否连接 这就是 IBOutlet 在 tableviewcell.swift 中的一点 【参考方案1】:

UITextField 委托方法被触发时,您似乎正在尝试设置activeTextField 的值。但是,我看不到您将视图控制器设置为这些文本字段的 delegate 的位置。我认为您需要在cellForRowAtIndexPath 中添加一些内容(或者可能在单元格的configure 方法中)来设置textField 的delegate

编辑

我会修改你的 configure 方法来设置 textField 的委托:

public func configure(placeholder: String, delegate : UITextFieldDelegate) 
        textField.placeholder = placeholder
        textField.accessibilityLabel = placeholder
        textField.delegate = delegate

    

并同样修改视图控制器(无论您调用configure):

    cell!.configure("...", delegate:self)

结束编辑

我还将使activeTextField 完全可选(不是隐式展开),因为它完全有可能为零(例如,如果在编辑任何文本字段之前点击了保存)。然后,您应该使用 if let 来解开 saveTapped 方法中的可选项。

【讨论】:

如何使 activetextfield 完全可选? 用 ? 声明它而不是!,就像这样var activeTextField: UITextField?。然后当你想使用它的时候,使用if let textField = activeTextField ...来解开它。 现在当我按下保存按钮时它什么也不做 是否调用了委托方法(尤其是 textField:didBeginEditing:)? 您的视图控制器有一个名为 textFieldDidBeginEditing(textField: UITextField) 的公共函数。当您在单元格的文本字段中编辑文本时,应该调用它。要检查,请添加一行 println("textFieldDidBeginEditing was called") 以记录该函数是否被调用。

以上是关于CoreData TextField - 意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

自定义UITableViewCell中的UITextField意外发现为零

Swift 3.0 - 核心数据 / 意外发现 nil

带有 CoreData 的 TextField

从 CoreData 中的 TextField 保存和获取

自定义 UITableViewCell 中的 UITextField 意外发现 nil

从 coredata 表中检索数据到 UIPickerView(在 textField 内)