首页 文章

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

提问于
浏览
0

我已经被困了几天,需要一些帮助 . 我的数据模型设置有两个实体(一对多关系) . 圆<---- >>洞 . 在一个视图控制器中,我设置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 回答

  • 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

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

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

相关问题