Как добавить / удалить элемент из Core Data / Table View - PullRequest
0 голосов
/ 25 апреля 2018

Введение: Я новичок в вопросах программирования и на пути к изучению языка программирования Swift. Я изучаю книгу и задаю там несколько упражнений / вопросов. Пробовал искать / реализовывать разные методы, но ничего не помогло.

Основной вопрос: По сути, это приложение для хранения некоторых значений для «Книжного магазина» вместе с помощью Core Data. Вот код из ViewController.swift. В настоящее время у меня есть только одна кнопка для добавления новой книги в формате «Моя книга» + «books.count».

    import UIKit
import CoreData
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet weak var deleteBook: UIBarButtonItem!   
    var managedObjectContext: NSManagedObjectContext!
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return loadBooks().count
    }   
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") else { return UITableViewCell() }
        let book: Book = loadBooks()[indexPath.row]
        cell.textLabel?.text = book.title
        return cell
    }
    func loadBooks() -> [Book] {
        let fetchRequest: NSFetchRequest<Book> = Book.fetchRequest()
        var result: [Book] = []
        do {
            result = try managedObjectContext.fetch(fetchRequest)
        } catch {
            NSLog("My error: %@", error as NSError)
        }
        return result
    }
    @IBOutlet weak var myTableView: UITableView!
    override func viewDidLoad() {
        let appDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate
        managedObjectContext = appDelegate.persistentContainer.viewContext as NSManagedObjectContext
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }  
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    @IBOutlet weak var addNew: UIBarButtonItem!  
    @IBAction func addNew(_ sender: Any) {
        let book: Book = NSEntityDescription.insertNewObject(forEntityName: "Book", into: managedObjectContext) as! Book
        book.title = "My Book" + String(loadBooks().count)
        do {
            try managedObjectContext.save()
        } catch let error as NSError {
            NSLog("My Error: %@", error)
        }
        myTableView.reloadData()
    }
     @IBAction func deleteBook(_ sender: Any) {

}
}

Итак, вот пара упражнений, которые я пытаюсь выполнить:

  1. Добавление в приложение нового представления, позволяющего пользователю вводить название книги
  2. Укажите способ удаления книги из списка

1 Ответ

0 голосов
/ 25 апреля 2018

Лучше использовать NSFetchedResultsController при работе с tableView и coreData.Для получения дополнительной информации и теперь о том, как это настроить, проверьте эту ссылку из изучения программирования Apple CoreData:

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...