2012-05-27 3 views
0

Как бы перевести this PGMidi example code в RubyMotion? The documentation the MIDIPacketList упоминает особые оговорки, и я не уверен, как их учитывать в RubyMotion. Пример:Как перебирать 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); 
    } 
} 

Я знаю, что я теряю указатель реферирование/разыменования с «пакета» локальный вар и «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 

Спасибо за какие-либо указания!

+2

Какие ошибки вы получаете? В одном случае у вашего селектора добавленной строки, скорее всего, есть двоеточия в конце, например. 'addString:' –

+0

Эй, Пол, спасибо за ответ! Я решил отдохнуть от RubyMotion и немного углубиться в Objective-C. Кривая обучения для RubyMotion оказалась неприятно крутой без лучшего заземления в Objective-C. Я обновлю эту тему, как только подниму ноги. –

ответ

0

Если у вас есть указатели на работу, которые вы ищете, RubyMotion предоставляет класс Pointer. http://www.rubymotion.com/developer-center/guides/runtime/#_pointers

+0

Спасибо за ссылку! В итоге я отправил запрос на поддержку и узнал, что в компиляторе RubyMotion есть ошибка. Агент поддержки [зарегистрировал отчет об ошибке] (http://hipbyte.myjetbrains.com/youtrack/issue/RM-33#comment=74-760), и пока он видел какую-то активность, мы находимся 10 месяцев и все еще нет разрешения. Конечно, давая мне паузу о написании MIDI-приложения с RubyMotion. –