我有一个小代码集,可以捕获来自监控设备的数据消息。消息包含唯一的日期/时间字段(startDts)。我将这些与核心数据存储到sqlite数据库。我为startDts设置了一个约束。一切顺利,直到我收到一条我之前已经收到过startDts的消息 - 我在尝试保存时遇到'Contraint违规'。说得通。
我的问题是我似乎无法在代码中捕获它。相反,调试器只是在'try'行停止。
let we = WaterEvent(context: self.coreDataStack.context)
we.startDts = e.startTime as NSDate?
we.stopDts = e.endTime as NSDate?
do {
try self.coreDataStack.context.save() // << Xcode breaks here on constraint violation
}
catch {
let nserror = error as NSError
print("CoreDataStack Unresolved error \(nserror), \(nserror.userInfo)")
print("Constraint violation for: \(we.startDts)")
}
所以'catch'代码块永远不会执行,即我无法真正智能地响应约束违规。
这是调试器输出的快照:
前三行是我的代码第4行和第4行的打印语句。 5是调试器输出。
那是怎么回事? “约束违规”不是抛出异常吗?