Bezeichnung
PerformSelector -- führt einen Selektor aus (V7.0)
Übersicht
[ret] = PerformSelector(s$[, ...])
Plattformen
Nur iOS

Beschreibung
Dieser Befehl kann verwendet werden, um einen Selektor im Appdelegate Ihrer Anwendung auszuführen, d.h. er erlaubt nativen Code mit Ihrem Hollywood-Skript aufzurufen. Der Name des Selektors muss als Zeichenkette in s$ angegeben werden.

Der in s$ angegebene Selektor wird dann mit einem NSMutableArray als einziges Argument ausgeführt. Innerhalb dieses Feldes enthält Index 1 den lua_State und Index 2 beinhaltet einen Zeiger auf eine hwPluginAPI-Struktur, die es Ihnen erlaubt, auf alle öffentlichen APIs und insbesondere die Lua-VM zuzugreifen. Die Indizes 3 und 4 enthalten den UIViewController und UIView. Bei der Rückgabe müssen Sie den Index 0 auf eine NSValue setzen, die einen int enthält, der den Rückgabecode von Ihrer Funktion angibt. Sehen Sie bitte in der Hollywood SDK-Dokumentation für weitere Details nach (vor allem die Kapitel zum Schreiben von Bibliotheken-Plugins).

Sie müssen den gewünschten Selektor im Appdelegate Ihrer Anwendung in nativem Code implementieren. So könnte ein benutzerdefinierter Selektor in Objective-C aussehen:

 
- (void)MyTestSelector:(NSMutableArray *) args
{
// notwendige Daten von Hollywood holen
lua_State *L = (lua_State *)
[((NSValue *) [args objectAtIndex:1]) pointerValue];
hwPluginAPI *hwcl = (hwPluginAPI *)
[((NSValue *) [args objectAtIndex:2]) pointerValue];

// es gibt einen Rückgabewert (Zeichenkette)
int retval = 1;

// Zeichenkette im Stackindex 2 ausgeben
printf("%s\n", hwcl->LuaBase->luaL_checklstring(L, 2, NULL));

// Rückgabestring auf Stack legen
hwcl->LuaBase->lua_pushstring(L, "Test return value");

// Rückgabewert setzen
[args replaceObjectAtIndex:0 withObject:[NSValue value:&retval
withObjCType:@encode(int*)]];
}

Dieser Selektor gibt das Zeichenketten-Argument aus, welches PerformSelector() als Argument 2 übergeben wird. Es wird dann die Zeichenfolge "Test return value" an das Hollywood-Skript zurückgegeben. Sie können diesen Selektor aus Ihrem Hollywood-Skript wie folgt ausführen:

 
DebugPrint(PerformSelector("MyTestSelector", "Test"))

Dieser Code übergibt die Zeichenfolge "Test" an die Methode MyTestSelector. Der Befehl DebugPrint() wird "Test return value" ausgeben, weil das der Rückgabewert von MyTestSelector ist.

Denken Sie daran, dass Ihre Selektor-Funktion nicht auf dem Main-Thread (UI) laufen wird, sondern auf dem VM-Thread von Hollywood. Wenn Sie also UIKit-Funktionen (oder andere OS-Funktionen, die nur vom Main-Thread ausgeführt werden dürfen) benutzen möchten, dürfen Sie nicht vergessen, den entsprechenden Code zuerst an den Main-Thread zu delegieren.

Eingaben
s$
Name des auszuführenden Selektors
Rückgabewerte
ret
optional: Rückgabewerte Ihrer Selektorfunktion

Navigation zeigen