CoreData TextField - 意外发现 nil
CoreData TextField - unexpectedly found nil
我正在使用表视图中的 CoreData 和文本字段进行应用。在情节提要中,我有一个文本字段。应用程序中的不同内容,文本字段将增加五倍。在导航栏中,我有一个按钮可以保存您的书面数据。但是当我按下保存按钮时,应用程序崩溃并出现错误
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.
}
完整代码如下:
这是 TableViewCell 代码:
我也试过了
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()
}
看起来您正试图在触发 UITextField
委托方法时设置 activeTextField
的值。但是,我看不到您在哪里将视图控制器设置为那些文本字段的 delegate
。我认为您需要向 cellForRowAtIndexPath
添加一些内容(或者可能在单元格的 configure
方法中)以设置文本字段的 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
方法中解包可选。
我正在使用表视图中的 CoreData 和文本字段进行应用。在情节提要中,我有一个文本字段。应用程序中的不同内容,文本字段将增加五倍。在导航栏中,我有一个按钮可以保存您的书面数据。但是当我按下保存按钮时,应用程序崩溃并出现错误
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.
}
完整代码如下:
这是 TableViewCell 代码:
我也试过了
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()
}
看起来您正试图在触发 UITextField
委托方法时设置 activeTextField
的值。但是,我看不到您在哪里将视图控制器设置为那些文本字段的 delegate
。我认为您需要向 cellForRowAtIndexPath
添加一些内容(或者可能在单元格的 configure
方法中)以设置文本字段的 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
方法中解包可选。