如何使用RubyMotion迭代MIDIPacketList?

时间:2012-05-27 08:04:25

标签: objective-c coremidi rubymotion

我如何将this PGMidi example code翻译成RubyMotion? The documentation the MIDIPacketList提到了特别的警告,我不确定如何在RubyMotion中解释它们。例如:

  

请注意,列表中的数据包虽然定义为数组,但可能无法作为数组访问,因为它们是可变长度的。

这是一个例子,进一步向下,就我在翻译中所做的那样:

- (void) midiSource:(PGMidiSource*)midi midiReceived:(const MIDIPacketList *)packetList
{
    [self performSelectorOnMainThread:@selector(addString:)
                           withObject:@"MIDI received:"
                        waitUntilDone:NO];

    const MIDIPacket *packet = &packetList->packet[0];
    for (int i = 0; i < packetList->numPackets; ++i)
    {
        [self performSelectorOnMainThread:@selector(addString:)
                               withObject:StringFromPacket(packet)
                            waitUntilDone:NO];
        packet = MIDIPacketNext(packet);
    }
}

我知道我正在丢失使用'packet'local var和'packetList'引用/解除引用的指针,但是我很难弄清楚如何纠正它:

def midiSource(midi, midiReceived:packetList)
  self.performSelectorOnMainThread('addString',
                   withObject:'MIDI received:',
                   waitUntilDone:false)

  packet = packetList.packet[0]
  i = 0
  while i < packetList.numPackets
    i += 1

    self.performSelectorOnMainThread('addString',
                                     withObject:stringFromPacket(packet),
                                     waitUntilDone:false)
    packet = MIDIPacketNext(packet)
  end
end

感谢任何指导!

1 个答案:

答案 0 :(得分:0)

如果它正在处理你正在寻找的指针,RubyMotion提供了Pointer类。 http://www.rubymotion.com/developer-center/guides/runtime/#_pointers