如何捕获核心数据“违反约束” Xcode8 / iOS10

Yoh*_*hst 6 core-data ios10 xcode8

我有一个小的代码集,可以捕获来自监视设备的数据消息。消息包含唯一的日期/时间字段(startDts)。我将这些数据和核心数据存储到sqlite数据库中。我已经为startDts设置了约束。一切顺利,直到我收到之前已经收到的带有startDts的消息-尝试保存时收到“违反约束”。说得通。

我的问题是我似乎无法在代码中捕获它。相反,调试器仅在“ 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)")  
}
Run Code Online (Sandbox Code Playgroud)

因此,永远不会执行“ catch”代码块,即,我无法真正智能地响应约束冲突。

这是调试器输出的快照: 在此处输入图片说明 前三行是我的代码中的打印语句,第4行和第5行是调试器输出。

发生什么了?是“违反约束”不是引发的异常吗?