-How the table displays changes
-How a user can add a new note
-Saving and persisting changes
-Memory management
class CoreDataTableViewController: UITableViewController { var fetchedResultsController : NSFetchedResultsController<NSFetchRequestsResult>?{ didSet { fetchedResultsController?.delegate = self executeSearch() tableView.reloadData() } } init(fetchedResultsController fc : NSFetchedResultsController<NSFetchRequestResult>, style: UITableViewStyle = .plain){ fetchedResultsController = fc super.init(style: style) } required init?(coder aDecoder: NSCoder){ super.init(coder: aDecoder) } }
class NotebooksViewController: CoreDataTableViewController { // MARK: Life Cycle overeride func viewDidLoad(){ super.viewDidLoad() title = "CoolNotes" let delegate = UIApplication.shared.delegate as! AppDelegate let stack = delegate.stack let fr = NSFetchRequest<NSFetchRequestResult>(entityName: "Notebook") fr.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true), NSSortDescriptor(key: "creationDate", ascending: false)] fetchedResultsController = NSFetchedResultsController(fetchRequest: fr, managedObjectContext: stack.context, sectionNameKeyPath: nil, cacheName: nil) } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let nb = fetchedResultsController!.object(at: indexPath) as! Notebook let cell = tableView.dequeueReusableCell(withIdentifier: "NotebookCell", for: indexPath) cell.textLabel?.text = nb.name cell.detailTextLabel?.text = "\(nb.notes!.count) notes" return cell } }