我已经被困了几天,需要一些帮助。 我的数据模型设置有两个实体(一对多关系)。 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
}
这是我尝试分配关系属性
的prepareFroSegueoverride 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)
}
答案 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
?