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意外发现为零