Ввод и хранение данных в CoreData работает нормально. Как и при удалении, по крайней мере, я так думал!
После того, как я удаляю запись из моего TableView - и иду, чтобы добавить другую запись, случайная запись из моей уже существующей таблицы записей будет заменена записью Iранее удалено. И я потеряю любое значение, которое я сохранил в той ячейке TableView, с той, которая только что вернулась.
Я разместил свой код ниже:
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var items: [Upperbody] = []
override func viewWillAppear(_ animated: Bool) {
fetchData()
}
override func viewDidLoad() {
super.viewDidLoad()
tableStyle()
}
//MARK - fetch the data from CoreData
func fetchData() {
do {
items = try context.fetch(Upperbody.fetchRequest())
print(items)
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print("Couldn't Fetch Data")
}
}
func tableStyle() {
self.tableView.rowHeight = 65.0
self.tableView.separatorStyle = .singleLine
}
}
extension UpperbodyDisplayTableViewController {
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = items[indexPath.row].entry
cell.textLabel?.text = items.reversed()[indexPath.row].entry
//cell.textLabel?.textColor = UIColor(red: 41/255, green: 128/255, blue: 185/255, alpha: 1.0)
cell.backgroundColor = FlatSkyBlue()
let date = items.reversed()[indexPath.row].date
let time = items.reversed()[indexPath.row].time
if let date = date, let time = time {
let timeStamp = "Added on \(date) at \(time)"
cell.detailTextLabel?.text = timeStamp
}
return cell
}
//MARK - The TableView method for displaying the entries
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
//MARK - the TableView edit - aka deleting the entry from the Tableview
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let delete = UIContextualAction(style: .destructive, title: "Remove entry") { (contextualAction, view, boolValue) in
let item = self.items[indexPath.row]
self.context.delete(item)
(UIApplication.shared.delegate as! AppDelegate).saveContext()
//remove the entry by swiping right
self.items.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
}
delete.image = UIImage(named: "trash.png")
delete.backgroundColor = FlatWatermelonDark()
let removeSwipeAction = UISwipeActionsConfiguration(actions: [delete])
return removeSwipeAction
}