4

問題

単純にレコードを保存してからフェッチしようとしていますが、レコードが保存されていないため、ここで何か間違っていると思います。出力ウィンドウには、空の配列が表示されます。

Xcode 7 ベータ 5 でボイラープレートAppDelegate CoreData スタックを使用しています。 [Gist Here を参照]

試み

実在物

ここに画像の説明を入力

モデル

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 に答える