【发布时间】:2014-09-09 11:19:58
【问题描述】:
我有一个包含以下实体的应用:Station、Program 和 StationProgram:
Station <-->> StationProgram <<--> Program
Station是指一个电动阀,Program是一个浇水程序(数据库中可以有N个程序),StationProgram在Program中有一个表示Station浇水时间的属性。
关键是我可以在数据库中(在它们各自的视图控制器中)正确地创建 Station 和 Program 的实例。但是,我有一个 TableViewController ,对于在前一个控制器中选择的给定站,我想显示所有可用的程序,并带有一个 UISwitch 指示该程序是否已与该站相关联。最初,电台和节目之间没有关联。用户可以与数据库中的所有现有程序进行交互,并为此站激活它们(将指向该程序的表行中显示的 UISwitch 设置为打开)。最后,当用户想保存配置时,我想将数据插入到表 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)
}
具体来说,执行在“newStationProgramInstance.toStation = station as Station”行崩溃。它说 swift_dynamicCastClassUnconditional 在
线程 1:EXC_BREADKPOINT(代码=EXC_I386_BPT,子代码=0x0)
非常感谢您的帮助。
【问题讨论】: