Mit NSMethodSignature auf dem iPhone (mit Obj-C 2.0-Eigenschaften)
Hey Leute, ich bin mit dem folgenden code auf mein Handy, wo 'Objekt' ist eine Katze, die eine Unterklasse von Tier. Tier hat eine Eigenschaft 'Farbe':
NSLog(@"Object: %@", object);
NSLog(@"Color: %@", [object color]);
NSMethodSignature *signature = [[object class] instanceMethodSignatureForSelector:@selector(color)];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:object];
[invocation invoke];
Die Ausgabe in meiner Konsole ist:
2009-06-28 16:17:07.766 MyApplication[57869:20b] Object: <Cat: 0xd3f370>
2009-06-28 16:17:08.146 MyApplication[57869:20b] Color: <Color: 0xd3eae0>
Dann, bekomme ich die folgende Fehlermeldung:
*** -[Cat <null selector>]: unrecognized selector sent to instance 0xd3f370
Irgendwelche Hinweise? Ich bin mit diesem ähnlichen Verfahren in anderen Klassen, aber ich kann nicht herausfinden, was mache ich falsch in diesem Fall. Der Schalter "Farbe" existiert wohl, aber ich weiß nicht, warum es nicht richtig erkannt.
- "Tier hat eine Eigenschaft 'color'..." ich würde es sehr gerne sehen, Ihre Implementierung dieser Eigenschaft in der Kopffüßer-Unterklasse. 🙂
- Zum Glück, Obj-C ist eine reflektierende Sprache. 😀
Du musst angemeldet sein, um einen Kommentar abzugeben.
Probieren Sie etwas wie dieses:
Ihnen fehlten ein Aufruf
NSInvocation
'ssetSelector:
Methode.NSMethodSignature
Datensätze geben Sie Informationen für die Argumente und den Rückgabewert einer Methode, aber enthält nicht den Selektor selbst. Also, wenn Sie wollen, um es mit einemNSInvocation
müssen Sie der Aufruf-Selektor als gut.[invocation setSelector:sel];
, man kann auch sageninvocation.selector = sel;