Core data Swift核心数据,设置关系时动态转换失败

Core data Swift核心数据,设置关系时动态转换失败,core-data,swift,relationship,Core Data,Swift,Relationship,我被困了几天,需要帮助。 我的数据模型设置为两个实体(一对多关系)。圆>洞。在一个视图控制器中,我设置了圆并指定了它的属性(让我们称这个对象为roundObject)。我提取并获取此NSManagedObject roundObject,然后将其传递给另一个视图控制器。在这个新的VC中,我现在要指定Hole的属性(它与Round有关系)。但是,当我尝试分配Hole(名为holeToRound)的relationship属性时,它将不接受我传入的NSManagedObject roundObjec

我被困了几天,需要帮助。 我的数据模型设置为两个实体(一对多关系)。圆>洞。在一个视图控制器中,我设置了圆并指定了它的属性(让我们称这个对象为roundObject)。我提取并获取此NSManagedObject roundObject,然后将其传递给另一个视图控制器。在这个新的VC中,我现在要指定Hole的属性(它与Round有关系)。但是,当我尝试分配Hole(名为holeToRound)的relationship属性时,它将不接受我传入的NSManagedObject roundObject。它告诉我“NSManagedObject不能转换为圆形”。所以我尝试将MyRound转换为Round,然后它崩溃了应用程序,告诉我“Swift dynamic cast失败”

任何帮助都会很好。我只是缺少设置关系属性的一个基本步骤吗?本质上,我希望能够在一个VC中设置一个实体属性,在另一个VC中通过一对多关系属性设置另一个实体。例如,在这个特定的应用程序中,我有一个高尔夫球场,我定义课程名称,然后我有许多洞对象(1-18),在这里我要定义和设置每个洞的PAR和码数。 这是两个模型类

class Hole: NSManagedObject {

@NSManaged var par: String
@NSManaged var yards: String
@NSManaged var holeToRound: Round
@NSManaged var holeNum: String

}

class Round: NSManagedObject {

@NSManaged var course: String
@NSManaged var playerOne: String
@NSManaged var playerTwo: String
@NSManaged var roundToHole: NSSet

}
这是我试图分配关系属性的prepareFroSegue

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext

    if segue.identifier == "hole1Segue" {



        let entity = NSEntityDescription.entityForName("Hole", inManagedObjectContext: context)

        let newHole = Hole(entity: entity, insertIntoManagedObjectContext: context)



        newHole.holeToRound = roundObject as Round

        context.save(nil)
}

在Swift中,错误信息通常仍然具有误导性


您是否尝试过使用
var
而不是
let
创建
newHole


您是否尝试过使用
var
而不是
let
创建
newHole


您是否尝试过使用
var
而不是
let
创建
newHole


您是否尝试过使用
var
而不是
let
创建
newHole

我发现它不允许我分配关系属性的原因是因为我没有在NSManagedObject模型文件中包含@objc()语句。一旦我这么做了,效果就很好了

import Foundation
import CoreData

@objc(Round)
class Round: NSManagedObject {

@NSManaged var course: String
@NSManaged var playerOne: String
@NSManaged var playerTwo: String
@NSManaged var roundToHole: NSSet

}

我发现它不允许我分配关系属性的原因是,我没有在NSManagedObject模型文件中包含@objc()语句。一旦我这么做了,效果就很好了

import Foundation
import CoreData

@objc(Round)
class Round: NSManagedObject {

@NSManaged var course: String
@NSManaged var playerOne: String
@NSManaged var playerTwo: String
@NSManaged var roundToHole: NSSet

}

我发现它不允许我分配关系属性的原因是,我没有在NSManagedObject模型文件中包含@objc()语句。一旦我这么做了,效果就很好了

import Foundation
import CoreData

@objc(Round)
class Round: NSManagedObject {

@NSManaged var course: String
@NSManaged var playerOne: String
@NSManaged var playerTwo: String
@NSManaged var roundToHole: NSSet

}

我发现它不允许我分配关系属性的原因是,我没有在NSManagedObject模型文件中包含@objc()语句。一旦我这么做了,效果就很好了

import Foundation
import CoreData

@objc(Round)
class Round: NSManagedObject {

@NSManaged var course: String
@NSManaged var playerOne: String
@NSManaged var playerTwo: String
@NSManaged var roundToHole: NSSet

}

嗯……很有趣。我只是用var代替了let,但我还是遇到了一个崩溃…你介意发布你的测试代码吗,这样我就可以看一下了?它似乎正在撞击newHole.holeToRound=roundObject as Round。如果我把那行注释掉,segue就可以了。如果我把那一行留下来,当我按下这个序列的按钮时,它就会崩溃。想法?嗯…很有趣。我只是用var代替了let,但我还是遇到了一个崩溃…你介意发布你的测试代码吗,这样我就可以看一下了?它似乎正在撞击newHole.holeToRound=roundObject as Round。如果我把那行注释掉,segue就可以了。如果我把那一行留下来,当我按下这个序列的按钮时,它就会崩溃。想法?嗯…很有趣。我只是用var代替了let,但我还是遇到了一个崩溃…你介意发布你的测试代码吗,这样我就可以看一下了?它似乎正在撞击newHole.holeToRound=roundObject as Round。如果我把那行注释掉,segue就可以了。如果我把那一行留下来,当我按下这个序列的按钮时,它就会崩溃。想法?嗯…很有趣。我只是用var代替了let,但我还是遇到了一个崩溃…你介意发布你的测试代码吗,这样我就可以看一下了?它似乎正在撞击newHole.holeToRound=roundObject as Round。如果我把那行注释掉,segue就可以了。如果我把那一行留下来,当我按下这个序列的按钮时,它就会崩溃。思想?