Проблемы при сохранении с CoreData и Swift 2.0

Проблема

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

Я использую стандартный стек AppDelegate CoreData в Xcode 7 beta 5. [См. Суть здесь]

Пытаться

Сущность

введите описание изображения здесь

Модель

import Foundation
import CoreData

// @func(Person) edit: removed 
class Person: NSManagedObject {

    @NSManaged var firstName: String?
    @NSManaged var lastName: String?
}

Контроллер просмотра

import UIKit
import CoreData

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        seedPerson()
        fetch()
    }

    func seedPerson() {

        let managedContext = AppDelegate().managedObjectContext

        let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext)

        let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

        // add our data
        person.setValue("Dan", forKey: "firstName")
        person.setValue("Beaulieu", forKey: "lastName")

        // save it
        do {

            try AppDelegate().managedObjectContext.save()
        } catch {
            fatalError("Failure to save context: \(error)")
        }
    }

    func fetch() {
        let moc = AppDelegate().managedObjectContext
        let personFetch = NSFetchRequest(entityName: "Person")

        do {
            let fetchedPerson = try moc.executeFetchRequest(personFetch) as! [Person]
            print(fetchedPerson.first!.firstName)


        } catch {
            fatalError("Failed to fetch person: \(error)")
        }
    }
}

Желаемое поведение

Я пытаюсь вернуть свое имя из хранилища данных, однако я не думаю, что моя запись когда-либо была сохранена, поэтому я получаю пустой массив.

Итак, у меня конкретный вопрос: как мне сэкономить, используя стандартный стек основных данных?


person Dan Beaulieu    schedule 08.08.2015    source источник


Ответы (1)


Проблема заключалась в том, что я создавал новый экземпляр managedObjectContext и пытался сохранить в него, что явно не сработало, потому что я работал с управляемым контекстом, который я создал в верхней части моего метода.

func seedPerson() {

        let managedContext = AppDelegate().managedObjectContext

        //let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext)

        //let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

        let person = NSEntityDescription.insertNewObjectForEntityForName("Person", inManagedObjectContext: managedContext)

        // add our data
        person.setValue("Dan", forKey: "firstName")
        person.setValue("Beaulieu", forKey: "lastName")

        // save it
        do {
            // this was the problem ///////////////
            try managedContext.save()
        } catch {
            fatalError("Failure to save context: \(error)")
        }
    }

видео

Я загрузил видеоурок о том, как настроить основные данные в Swift 2: https://www.youtube.com/watch?v=WcQkBYu86h8

person Dan Beaulieu    schedule 08.08.2015