2014-09-02 8 views
6

ich brauche ein wenig Hilfe dieses rascheBrauchen Sie Hilfe Umwandlung (CFPropertyListRef *) NSDictionary zu schnellen

MIDIDeviceRef midiDevice = MIDIGetDevice(i); 
NSDictionary *midiProperties; 

MIDIObjectGetProperties(midiDevice, (CFPropertyListRef *)&midiProperties, YES); 
NSLog(@"Midi properties: %d \n %@", i, midiProperties); 

zu konvertieren. Ich habe das, aber ich werde aufgehört, die CFProperList zu werfen.

var midiDevice = MIDIGetDevice(index) 
let midiProperties = NSDictionary() 

MIDIObjectGetProperties(midiDevice, CFPropertyListRef(midiProperties), 1); 
println("Midi properties: \(index) \n \(midiProperties)"); 

Jede Hilfe wäre großartig.

Dank

+0

Sie verwenden konstruiertes Objekt in konstant. Sie benötigen einen Zeiger auf NSDictionary, sodass MIDIObjectGetProperties ein Objekt erstellen und es überschreiben und somit einen Wert zurückgeben kann. –

Antwort

7

Dies ist die Signatur für MIDIObjectGetProperties in Swift:

func MIDIObjectGetProperties(obj: MIDIObjectRef, outProperties: UnsafeMutablePointer<Unmanaged<CFPropertyList>?>, deep: Boolean) -> OSStatus 

Sie Also müssen in ein UnsafeMutablePointer passieren zu einem Unmanaged<CFPropertyList>?:

var midiDevice = MIDIGetDevice(0) 
var unmanagedProperties: Unmanaged<CFPropertyList>? 

MIDIObjectGetProperties(midiDevice, &unmanagedProperties, 1) 

Jetzt können Sie Ihre Eigenschaften haben, aber sie sind in einer nicht verwalteten Variable - Sie können die takeUnretainedValue()-Methode verwenden, um sie zu erhalten, und dann das Ergebnis umsetzen CFPropertyList auf ein NSDictionary:

if let midiProperties: CFPropertyList = unmanagedProperties?.takeUnretainedValue() { 
    let midiDictionary = midiProperties as NSDictionary 
    println("Midi properties: \(index) \n \(midiDictionary)"); 
} else { 
    println("Couldn't load properties for \(index)") 
} 

Ergebnisse:

Midi properties: 0 
{ 
    "apple.midirtp.errors" = <>; 
    driver = "com.apple.AppleMIDIRTPDriver"; 
    entities =  (
    ); 
    image = "/Library/Audio/MIDI Drivers/AppleMIDIRTPDriver.plugin/Contents/Resources/RTPDriverIcon.tiff"; 
    manufacturer = ""; 
    model = ""; 
    name = Network; 
    offline = 0; 
    scheduleAheadMuSec = 50000; 
    uniqueID = 442847711; 
} 
+0

Arbeitete wie ein Charme - danke –