我有一个小的代码集,可以捕获来自监视设备的数据消息。消息包含唯一的日期/时间字段(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行是调试器输出。
发生什么了?是“违反约束”不是引发的异常吗?
我正在努力用swift初始化MusicPlayer.h中的MIDIMetaEvent结构头文件定义结构如下:
struct MIDIMetaEvent {
var metaEventType: UInt8
var unused1: UInt8
var unused2: UInt8
var unused3: UInt8
var dataLength: UInt32
var data: (UInt8)
}
Run Code Online (Sandbox Code Playgroud)
在"数据"成员之前,这似乎相当简单.这是1元素元组定义吗?我可以很容易地初始化所有其他结构元素但是徒劳地试图将"数据"设置为除单个值之外的任何其他内容.在我的代码中,我使用了一个名为myData的UInt8数组,并试图像这样初始化结构:
var msg = MIDIMetaEvent(
metaEventType : UInt8(0x7F),
unused1 : UInt8(0),
unused2 : UInt8(0),
unused3 : UInt8(0),
dataLength : UInt32(myData.count),
data : UnsafeBufferPointer<UInt8>(start: UnsafePointer<UInt8>(myData), count:myData.count) )
Run Code Online (Sandbox Code Playgroud)
但编译器对此并不满意,并抱怨"UnsafeBufferPointer无法转换为UInt8".如果我只是将数据设置为单个值但将dataLength设置为大于1的值,则生成的MIDIEventData显示事件中的第一个值是"数据"中的第一个值,后跟符合"dataLength"字节的乱码数据字节.很明显,"数据"被视为某种连续记忆.
那么如何将'data'元素设置为数组中的UInt8元素?
我正在测试一个采样数据的应用程序.我正在设置的部分测试需要存储一些数据点.我想通过让XCTest执行获取方法,然后执行sleep()函数并再次调用获取方法来实现这一点.
虽然有一些方法可以等待超时的期望,但似乎没有简单的wait()/ sleep()方法只是暂停执行指定的时间.知道如何使用Xcode 6和Swift来做到这一点吗?