4

问题

我试图简单地保存记录然后获取它,但我认为我在这里做错了,因为我的记录没有保存。输出窗口只显示一个空数组。

我在 Xcode 7 beta 5 中使用样板AppDelegate CoreData 堆栈。[请参阅此处的要点]

试图

实体

在此处输入图像描述

模型

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)")
        }
    }
}

期望的行为

我试图返回的是我从数据存储中获取的名字,但是我认为我的记录从未保存过,这就是为什么我得到的是一个空数组。

所以我的具体问题是,如何使用样板核心数据堆栈进行保存?

4

1 回答 1

7

问题是我正在创建一个 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

于 2015-08-08T18:56:05.430 回答