Wie ruft man performSelectorInBackground mit einer Funktion mit Argumenten auf?

8

Entschuldige die neue Frage (vielleicht). Ich entwickle eine App für iOS und versuche, ein externes XML aus dem Hauptthread auszuführen, um das UI nicht einzufrieren, während der Anruf seine Magie entfaltet.

Dies ist die einzige Möglichkeit, die ich kenne, um einen Prozess zu machen, der nicht im Haupt-Thread von Ziel c ausgeführt wird.

%Vor%

also habe ich meinen Anruf in eine Funktion eingekapselt

%Vor%

Jetzt muss ich die Zeichenfolge indXML zu einem Parameter der Funktion machen, um verschiedene XML-Dateien aufzurufen, die ich brauche. Etwas wie

%Vor%

In diesem Fall ändert sich der Aufruf von performSelector? Wenn ich es auf die übliche Weise mache, bekomme ich Syntaxfehler:

%Vor%     
Sasha Grievus 14.05.2013, 08:46
quelle

5 Antworten

15
%Vor%

dh: was Sie als withObject übergeben: wird der Parameter für Ihre Methode.

Genau wie ein Punkt von Interesse hier ist, wie Sie es mit GCD tun können:

%Vor%     
Mike Pollard 14.05.2013, 08:48
quelle
8

Dafür

%Vor%

Sie können so anrufen

%Vor%

Wenn Ihre Methode über Parameter verfügt, wird : mit method_name verwendet und der Parameter als withObject -Argument

übergeben     
βhargavḯ 14.05.2013 08:48
quelle
1

Der von Ihnen verwendete Selektor muss genau mit dem Methodennamen übereinstimmen - der Methodenname enthält die Doppelpunktzeichen (:). Also sollte dein Selektor sein:

%Vor%

Wenn Sie einen Parameter übergeben möchten.

Wenn Sie komplexere Daten übergeben müssen, haben Sie drei Möglichkeiten:

  1. Übergeben Sie ein NSArray oder NSDictionary mit den Parametern
  2. Übergeben Sie ein benutzerdefiniertes Objekt, das alle erforderlichen Daten als Attribute enthält
  3. Verwenden Sie GCD ( GCD_libdispatch-Referenz )
Wain 14.05.2013 08:52
quelle
1

Hi, versuch das,

%Vor%     
krishh 14.05.2013 08:56
quelle
0

Da performSelectorInBackground:withObject: nur ein Objektargument akzeptiert. Eine Möglichkeit, diese Einschränkung zu umgehen, besteht darin, ein Wörterbuch (oder Array) von Argumenten an eine "Wrapper" -Methode zu übergeben, die die Argumente dekonstruiert und Ihre tatsächliche Methode aufruft.

    
Srikar Appalaraju 14.05.2013 08:49
quelle