我有一个包含以下实体的应用程序:Station、Program和StationProgram:
Station <-->> StationProgram <<--> Program
Station是指一个电动阀,Program是一个浇水程序(数据库中可以有N个程序),StationProgram有一个属性,指示一个程序中一个站点浇水的时间。
关键是我可以在数据库中(在各自的视图控制器中)正确地创建站点和程序的实例。但是,我有一个TableViewController,其中,对于在前一个控制器中选择的给定电台,我想显示所有可用的程序,并有一个ui开关指示此程序是否与电台关联。最初,电台和节目之间没有关联用户可以与DB中的所有现有程序进行交互,并将它们激活到该站(设置表中显示的UISwitCH指向程序到ON)。最后,当用户想保存配置时,我想在table StationProgram中插入数据。现在,为了简化,我只想手动分配一个时间,例如,2分钟,给活动的程序。我有以下代码,但当我尝试映射此代码时,执行将崩溃:
@IBAction func saveTapped(sender: AnyObject) {
// Reference to our app delegate
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
// Reference moc
let context: NSManagedObjectContext = appDel.managedObjectContext!
let en = NSEntityDescription.entityForName("Station", inManagedObjectContext: context)
station.setValue(textFieldStationName.text as String, forKey: "name")
let en2 = NSEntityDescription.entityForName("StationProgram", inManagedObjectContext: context)
// The variable activePrograms contains the row of the table where this program is shown, and the wateringTime
for (selectedCellId,time) in activePrograms {
var newStationProgramInstance = StationProgram(entity: en2, insertIntoManagedObjectContext: context)
let program: NSManagedObject = programList[selectedCellId] as NSManagedObject
// Map our properties
newStationProgramInstance.wateringTime = time
// station is a variable of type Station that is filled from the previous controller
newStationProgramInstance.toStation = station as Station
newStationProgramInstance.toProgram = program as Program
}
context.save(nil)
self.navigationController.popViewControllerAnimated(true)
}
具体来说,在“newstationprogramminstance.toStation=station as station”行执行崩溃。上面说swift_dynamiccastclass无条件
线程1:EXC_BREADKPOINT(代码=EXC_I386_BPT,子代码=0x0)
非常感谢你的帮助。
最佳答案
在核心数据中,您将使用多对多关系(而不是单独的联接表)来建模这种关系。
Station (programs) <<----->> (stations) Program
使用联接表的唯一正当理由是,您是否希望添加并保留有关关系本身的其他信息(如dateCreated或类似信息)。我怀疑你的情况是这样的。
这种关系的建立现在变得微不足道了。如果模型是用相反的关系正确设置的,那么只需要一种方法就足够了。
newStation.addProgramsObject(newProgram)
关于ios - Swift CoreData:插入与其他2个实体相关的Entity的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25743330/