Обновление массива элементов для NSManagedObject
var items: [NSManagedObject] = []
Используйте этот метод для сохранения и вызовите его из действия сохранения:
func save(name: String, completed: Bool) {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Items", in: managedContext)!
let item = NSManagedObject(entity: entity, insertInto: managedContext)
item.setValue(name, forKeyPath: "name")
item.setValue(completed, forKeyPath: "completed")
do {
try managedContext.save()
items.append(item)
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
и для загрузки товаров используйте этот метод:
func loadItems() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Items")
do {
items = try managedContext.fetch(fetchRequest)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
Затем обновите метод cellForRowAtIndexPath, чтобы он был таким:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Item", for: indexPath)
let item = items[indexPath.row]
cell.textLabel?.text = item.value(forKeyPath: "name") as? String
cell.accessoryType = item.value(forKeyPath: "completed") as? Bool ? .checkmark : .none
return cell
}
Используйте KVC для доступа к любому атрибуту в элементах массива, например:
item.value(forKeyPath: "name") as? String