我正在设置应用程序的一个非常基本的功能,例如待办事项列表/记事本,用户可以在其中向UITableView添加空白单元格。该单元格将包含创建注释行时的系统时间,并且可以将其注释输入到textField中。
我设法设置了应用程序,以添加一个具有静态系统时间的空白单元格并将文本保存在textField中,但是,经过大量搜索之后,我只是想不出如何保存/持久化textFields值用户完成编辑或添加新的笔记单元格后。
我试图扭转将单元格添加到持久性容器的方式,但这并没有告诉应用程序正在更新的单元格只是创建一个新单元格。
我还不允许发布图片,所以这里是我的描述: 这是一个UITableView,右侧带有一个长条按钮“添加”,一个单元格包含一个UIlabel,左侧包含(systemTime),一个textField(noteLine)填充该单元格的右侧。
|--------------------------------------|
| notepad + |
|--------------------------------------|
|Prototype cell |
|--------------------------------------|
|12:17:12 |***textField*** ||
| |
| |
| |
| |
| |
| |
| |
| |
|______________________________________|
我的变量是:
var frc: NSFetchedResultsController = NSFetchedResultsController<NSFetchRequestResult>()
var pc = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
这是我的代码,添加了新的“注释行”
func newNoteline() {
let entityDescription = NSEntityDescription.entity(forEntityName: "Entity", in: pc)
let item = Entity(entity: entityDescription!, insertInto: pc)
item.notesheetLine = "Test"
item.timenoteline = timeOutlet.text
do {
try pc.save()
} catch {
print(error)
return
}
self.tableView.reloadData()
}
据此,我尝试保存以下内容,但它不起作用-我猜是因为我没有告诉应用程序要更新哪个单元格。
func save() {
let entityDescription = NSEntityDescription.entity(forEntityName: "Entity", in: pc)
let item = Entity(entity: entityDescription!, insertInto: pc)
item.notesheetLine = "Test Save"
do {
try pc.save()
} catch {
print(error)
return
}
self.tableView.reloadData()
}
我也尝试过这种方法,但还是没有运气:
func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?) {
let noteline = tableView.dequeueReusableCell(withIdentifier: "notelineIdentifier", for: indexPath!) as! notesheetTableViewCell
let item = frc.object(at: indexPath!) as! Entity
item.timeLine = noteline.timeLineOutlet.text
do {
try pc.save()
} catch {
print(error)
return
}
}
当前,我可以创建一个包含正确时间的新单元格。重新启动应用程序后,它是持久的,但是当我编辑单元格值时,取消选择该单元格或创建新的单元格行后,该值将立即清除。
那么有人可以让我摆脱困境,告诉我什么/是否有一个功能可以让用户在一个单元格中选择一个textField,对其进行编辑,一旦用户完成编辑,它将使用textField值。
答案 0 :(得分:0)
NSManagedObject
对象是引用类型,一种合适的解决方案是将实体项传递到单元格
在NotesheetTableViewCell
(请用大写字母命名)中添加属性
var entity : Entity!
在cellForRowAt
中将模型项传递到单元格
let item = frc.object(at: indexPath) as! Entity
cell.entity = item
在NotesheetTableViewCell
中,将textDidEndEditing
委托方法称为更新entity
。
didEndEditingRowAt
中保存上下文。