Swift核心数据,动态强制转换在设置关系时失败

时间:2014-08-12 04:06:05

标签: core-data swift relationship

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

任何帮助都会很棒。我只是错过了设置关系属性的基本步骤吗?本质上,我希望能够在一个VC中设置一个实体属性,而另一个实体通过另一个VC中的一对多关系属性。例如,在这个特定的应用程序中,我有一个高尔夫球回合,我定义了球场名称,然后我有多个孔对象(1-18),我想在那里定义并设置每个洞的标准杆和码数。

这是两个模型类

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

2 个答案:

答案 0 :(得分:2)

我发现它不允许我分配我的关系属性的原因是因为我没有在我的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

}

答案 1 :(得分:1)

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

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