私の携帯電話で次のコードを実行しています。ここで、 'object'はAnimalのサブクラスであるCatです。動物は、プロパティ '色' を持つ:iPhoneでNSMethodSignatureを使用する(Obj-C 2.0のプロパティを使用)
NSLog(@"Object: %@", object);
NSLog(@"Color: %@", [object color]);
NSMethodSignature *signature = [[object class] instanceMethodSignatureForSelector:@selector(color)];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:object];
[invocation invoke];
私のコンソールの出力は次のとおりです。
その後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>
、私は次のエラーを取得する:
*** -[Cat <null selector>]: unrecognized selector sent to instance 0xd3f370
任意の手がかり?私は他のクラスでこのようなメソッドを使用していますが、このインスタンスで何が間違っているのか分かりません。セレクタ 'color'は明らかに存在しますが、なぜそれが正しく認識されていないのかわかりません。あなたはNSInvocation
のsetSelector:
メソッドの呼び出しを逃した
NSLog(@"Object: %@", object);
NSLog(@"Color: %@", [object color]);
SEL sel = @selector(color);
NSMethodSignature *signature = [[object class] instanceMethodSignatureForSelector:sel];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.selector = sel;
invocation.target = object;
[invocation invoke];
:
"動物には 'color'というプロパティがあります..."私はこのプロパティの実装をCuttlefishサブクラスで見たいと思います。 :-) –
幸いにも、Obj-Cは反射的言語です。 :D –