Core data Swift核心数据,设置关系时动态转换失败
我被困了几天,需要帮助。 我的数据模型设置为两个实体(一对多关系)。圆>洞。在一个视图控制器中,我设置了圆并指定了它的属性(让我们称这个对象为roundObject)。我提取并获取此NSManagedObject roundObject,然后将其传递给另一个视图控制器。在这个新的VC中,我现在要指定Hole的属性(它与Round有关系)。但是,当我尝试分配Hole(名为holeToRound)的relationship属性时,它将不接受我传入的NSManagedObject roundObject。它告诉我“NSManagedObject不能转换为圆形”。所以我尝试将MyRound转换为Round,然后它崩溃了应用程序,告诉我“Swift dynamic cast失败” 任何帮助都会很好。我只是缺少设置关系属性的一个基本步骤吗?本质上,我希望能够在一个VC中设置一个实体属性,在另一个VC中通过一对多关系属性设置另一个实体。例如,在这个特定的应用程序中,我有一个高尔夫球场,我定义课程名称,然后我有许多洞对象(1-18),在这里我要定义和设置每个洞的PAR和码数。 这是两个模型类Core data Swift核心数据,设置关系时动态转换失败,core-data,swift,relationship,Core Data,Swift,Relationship,我被困了几天,需要帮助。 我的数据模型设置为两个实体(一对多关系)。圆>洞。在一个视图控制器中,我设置了圆并指定了它的属性(让我们称这个对象为roundObject)。我提取并获取此NSManagedObject roundObject,然后将其传递给另一个视图控制器。在这个新的VC中,我现在要指定Hole的属性(它与Round有关系)。但是,当我尝试分配Hole(名为holeToRound)的relationship属性时,它将不接受我传入的NSManagedObject roundObjec
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就可以了。如果我把那一行留下来,当我按下这个序列的按钮时,它就会崩溃。思想?