엑스 코드 8 베타 2/스위프트 3 :MIDIThruConnectionCreate는 항상 지속적인 MIDI 쓰루 연결을 생성합니까?
따르면 Apple's CoreMIDI API documentation에/연결을 통해 미디은 (앱이 종료하고 시스템을 재부팅 후에도 영원히 장소에서 숙박) 지속적으로 설립 할 수있다 또는 비 영구적 인 임시 (귀하의 응용 프로그램이 소유하고 응용 프로그램 종료시 자동으로 파괴).
내가 끼고있는 문제는 입니다. Apple의 지침을 따르고 있어도 비 영구 연결을 만들 수 없습니다.
이 내려 this API에 온다 : 당신은 스위프트 선택 사항입니다 inPersistentOwnerID
에 널 (nil
)를 전달하면
func MIDIThruConnectionCreate(_ inPersistentOwnerID: CFString?,
_ inConnectionParams: CFData,
_ outConnection: UnsafeMutablePointer<MIDIThruConnectionRef>) -> OSStatus
는 연결 는 일시적으로 만들어야합니다. 그러나 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의 버그 일 수 없습니다.
감사합니다. 나는 앱 발사 및 종료시 자체적으로 'persistendID'와 연결 관계를 모두 처리하는 것을 고려해 왔지만, 해결 방법이 더 많으며 분명히 앱이 충돌 할 경우와 같이 모든 경우를 다루지는 않습니다 원하지 않을 수도있는 연결을 통해 고아가되었습니다. Objective-C에서도 비 지속성 쓰루 연결을 생성 할 수 없다고 말했습니까? 그러면 Swift API 래퍼 레이어의 버그가 아니라 실제로 버그 또는 오해의 소지가있는 API 버그를 지적하게됩니다. – stef
위 아이디어는 새로운 앱을 만들기 전에 앱을 시작할 때 이전 연결을 정리하는 것입니다. 나는 그들이 외부 엔드 포인트 사이에서만 만들어진 경우를 제외하고는 앱이 충돌 한 후에 커넥션을 통해 고아가 된 것으로 간주하지 않는다. 그러면 "위험"은 엔드 포인트가 계속 연결되어있는 것입니다. 지금 개발중인 앱에서는 위의 제안대로하고 있습니다. 이는 내 가상의 끝점과 연결하거나 연결하기 때문에 제대로 작동하므로 앱이 중단 되더라도 끝점은 계속 살아있을 수 없습니다. –
Swift3에서이 작업을 수행하는 방법에 대한 아이디어가 있습니까? Swift가 두 번째 매개 변수에 대해 원하는'Unmanaged'옵션에 대한 포인터를 만드는 방법을 이해할 수 없습니다. –
Alnitak