CoreData - TableView не обновляется

Итак, я изо всех сил пытаюсь научиться правильно обращаться с CoreData.

Вот мой код:

import UIKit
import CoreData

class IngredientsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate {

    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    var fetchedResultsController: NSFetchedResultsController?


    override func viewDidLoad() {
        super.viewDidLoad()

        fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchIngredients(), managedObjectContext: moc!, sectionNameKeyPath: nil, cacheName: nil)
        fetchedResultsController?.delegate = self
        fetchedResultsController?.performFetch(nil)

    }

    func fetchIngredients() -> NSFetchRequest {

        var fetchRequest = NSFetchRequest(entityName: "DetailsForRecipe")
        let sortDescriptor = NSSortDescriptor(key: "ingredients", ascending: true)

        fetchRequest.predicate = nil
        fetchRequest.sortDescriptors = [sortDescriptor]
        fetchRequest.fetchBatchSize = 20

        return fetchRequest

    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return fetchedResultsController?.sections?[section].numberOfObjects ?? 0
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("ingCell", forIndexPath: indexPath) as! UITableViewCell
        if let ingCell = fetchedResultsController?.objectAtIndexPath(indexPath) as? DetailsForRecipe {
            cell.textLabel?.text = ingCell.ingredients
        }
        return cell
    }
}

а также

import UIKit
import CoreData

class SingleIngredientViewController: UIViewController {

    @IBOutlet var ingField: UITextField!
    var moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    @IBAction func addIng(sender: AnyObject) {

        let entityDescription = NSEntityDescription.entityForName("DetailsForRecipe", inManagedObjectContext: moc!)
        let details = DetailsForRecipe(entity: entityDescription!, insertIntoManagedObjectContext: moc)
        details.ingredients = ingField.text

        var error: NSError?
        moc?.save(&error)

        if let err = error {
            var status = err.localizedFailureReason
            println(status)
        } else {
            println("Ingredient \(ingField.text) saved successfully!")
        }

        if let navigation = navigationController {
            navigation.popViewControllerAnimated(true)
        }
    }
}

Моя модель:

import Foundation
import CoreData

    class DetailsForRecipe: NSManagedObject {

        @NSManaged var name: String
        @NSManaged var ingredients: String
        @NSManaged var image: NSData

    }

Приложение должно вставить имя ингредиента в текстовое поле, сохранить его в coreData, затем оно должно быть получено в табличном представлении. Когда я отправляю текстовое имя ингредиента и нажимаю "добавить", в печатном сообщении говорится, что оно успешно сохранено, но представление таблицы не обновляется.

Что я здесь не так делаю? Я не разработчик, я прочитал много уроков о том, как это сделать, но это очень запутанно! Так что прости меня об этом. Заранее спасибо!

2 ответа

Решение

Я не прочитал ваш полный исходный код, но сразу бросив взгляд, я не вижу, что вы вызвали просмотр таблицы reloadData функция. Если у вас не настроен IBOutlet для вашего табличного представления, вы захотите сделать это, а затем позвоните reloadData() в теме.

Вызов reloadData() на вашем столе после внесения изменений.

Другие вопросы по тегам