2010-12-09 5 views
1

Newbie Frage hier. Ich möchte in der Lage sein, über Daten (d. H. Eine XML-Datei) die entsprechende zu sendende Objective-C-Nachricht anzugeben. Irgendwelche Tipps, ob das möglich ist oder wie ich das machen kann?Wie kann ich eine Obj-c-Funktion nennen, um XML-Daten aufzurufen

Die nächste beste Sache, wenn ich das nicht tun kann, wäre eine Möglichkeit, ein Kartenobjekt zu erstellen, das einen Schlüssel (int) mit einer Funktion korrelieren würde (ich nehme auch einen Selektor an). Ist das möglich, wenn das obige nicht ist?

Wenn mich jemand auf ein Tutorial oder einen Beispielcode als Referenz verweisen könnte, wäre das großartig. Im Moment mache ich Dinge mit einer großen Switch-Anweisung, und ich mag es nicht. (Ich schalte die ID ein und rufe die für die jeweilige ID relevante Methode explizit auf.)

+0

Im Ernst, ich wünschte, ich könnte Sie zweimal upvote. Eine zusammenhängende Frage und eine Frage, die mehr Anfänger stellen sollten. Prost. –

Antwort

1

Ich liebe, dass Sie diese Frage gestellt haben; zu oft sehe ich Satans geschwollenen Switch-Anweisung. Es ist schön, jemanden zu sehen, der stattdessen einen Funktionstisch benutzen möchte.

Wenn Sie eine Eigenschaftslistendatei verwenden (die normalerweise in XML codiert ist), ist dies wirklich einfach.

Machen Sie einfach eine Eigenschaftsliste, in der das Wurzelelement ein Wörterbuch ist, das von einigen Schlüsseln auf einige Selektoren abbildet.

Key    Type   Value 
---------------------------------------------- 
Root    Dictionary 
    firstKey  String  someSelector 
    secondKey  String  anotherSelector 

Legen Sie die Inhalte Ihrer Eigenschaftsliste in eine NSDictionary:

id path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"]; 
id dict = [NSDictionary dictionaryWithContentsOfFile:path]; 

SEL selector = NSSelectorFromString([dict objectForKey:@"firstKey"]); 
if ([someObject respondsToSelector:selector]) { 
    [someObject performSelector:selector]; 
} 

Natürlich wollen Sie diese Logik in eine geeignete Methode, Refactoring, und wahrscheinlich die Eigenschaftenliste als Instanz zwischenzuspeichern Variable.

Hinweis: Ich persönlich denke, es ist besser, diese Funktionstabelle nur inline zu setzen; Eigenschaftslisten sind cool, aber ich bin nicht sicher, dass es in diesem Fall sehr hilfreich ist. Auch, wenn Sie mit der Verwendung von Objective-C++ kühl sind, können std::map Sie wegkommen mit nicht Einwickeln und die Wähler in NSString Objekte Abwickeln usw.

+0

Ziel-C++ ??? :) – willcodejavaforfood

+0

Objective-C++ ist nur Objective-C mit C++ gemischt. –

Verwandte Themen