【发布时间】:2016-11-18 00:22:20
【问题描述】:
Xcode 8 beta 2 / Swift 3:
根据Apple's CoreMIDI API documentation,MIDI 直通连接可以建立为持久的(永远保持原位,即使在您的应用退出并且系统重新启动后)或非持久/临时(由您的应用程序拥有并自动销毁它)应用程序退出)。
我遇到的问题是 我似乎无法创建非持久连接,即使我遵循 Apple 的指导方针。
归结为this API:
func MIDIThruConnectionCreate(_ inPersistentOwnerID: CFString?,
_ inConnectionParams: CFData,
_ outConnection: UnsafeMutablePointer<MIDIThruConnectionRef>) -> OSStatus
如果你将 null (nil) 传递给 inPersistentOwnerID,这是一个 Swift 可选的,连接应该被创建为临时的。但是,无论我传递 nil 还是 String,连接总是被创建为持久的。 (我可以通过检查 CoreMIDI 的持久直通连接来验证这一点。)
我的代码总结:
public class OTMIDIConnectedThru {
var connectionRef = MIDIThruConnectionRef()
init?(sourceEndpoints: [MIDIEndpointRef], destinationEndpoints: [MIDIEndpointRef], persistentOwnerID: String? = nil) {
var params = MIDIThruConnectionParams()
MIDIThruConnectionParamsInitialize(¶ms) // fill with defaults
// (... snip: code to prepare parameters here ...)
let paramsData = withUnsafePointer(¶ms) { p in
NSData(bytes: p, length: MIDIThruConnectionParamsSize(¶ms))
}
result = MIDIThruConnectionCreate(persistentOwnerID, paramsData, &connectionRef)
guard result == noErr else { return nil }
}
}
知道我做错了什么吗?这不可能是 API 中的错误?
【问题讨论】:
标签: swift xcode macos swift3 coremidi