我被困了几天,需要一些帮助。 我的数据模型设置有两个实体(一对多关系)。圆形 <---->> 孔。在一个 View Controller 中,我设置了 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)
}
最佳答案
我发现它不允许我分配关系属性的原因是因为我没有在我的 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
}
关于core-data - Swift Core Data,设置关系时动态转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255979/