swift2核心数据并处理关系

时间:2015-08-27 01:22:05

标签: ios xcode swift core-data

我做了一些搜索,并且所有示例都是obj-c或者根本不适用于xcode 7 beta 6.

我的xcode模型设置如下:

enter image description here

所以我有两个实体,一个叫Person,一个叫Pet。人有一个名字。宠物有一个名字和类型(狗,猫)。人与宠物有许多关系,宠物与人有一对一的关系。

这是我的简单代码:

import UIKit
import CoreData

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let context: NSManagedObjectContext = appDel.managedObjectContext

        let person = NSEntityDescription.insertNewObjectForEntityForName("Person", inManagedObjectContext: context)
        let pet = NSEntityDescription.insertNewObjectForEntityForName("Pet", inManagedObjectContext: context)

        person.setValue("Bill", forKey: "name")
        pet.setValue("Ruff", forKey: "name")
        pet.setValue("Dog", forKey: "type")

        person.setValue(pet, forKey: "pet")

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

当我运行它时,我收到以下错误:

  

由于未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:'不可接受的值类型   多对多的关系:财产="宠物&#34 ;;期望的类型= NSSet;特定   type = NSManagedObject;值=   (实体:Pet; id:0x7fa93bc2f4a0   

2 个答案:

答案 0 :(得分:0)

在一对多关系中,设置一对一关系会更方便。要做到这一点,可以采用相反的方式,但更复杂,因为您必须将一个对象添加到现有对象的可能cellForRowAtIndexPath:

NSSet

(使用正确的pet.person = person 子类。)

答案 1 :(得分:0)

原来我需要创建类文件。一旦我创建它们,一切都开始正常工作。