2

私はObjective-Cで動的プログラミングを行っており、Objective-Cランタイムプログラミングガイドを最初から最後まで読んで、必要なことのほとんどを行うことができましたが、私が理解していないことが1つありますメソッドの文字列表現があれば、メソッドを動的に呼び出す方法です。

基本的に、class_copyPropertyList を使用してリストから一致するプロパティがオブジェクトにあるかどうかを動的に確認し、ループして、plist ファイルから取り込まれた NSMutableDictionary を介してこれらを一致させます。一致が見つかったら、プロパティを実行します。これはさまざまなアプリにパッケージ化されるライブラリであるため、どのような一致が存在する可能性があるかを事前に知る方法はありません。

4

2 に答える 2

7

からNSSelectorFromStringを作成するために使用します。次に、いずれかの方法を使用して実行できます。SELNSStringperformSelector

プロパティを動的に設定する:

SEL setter = NSSelectorFromString(@"setProperty:");
[myObject performSelector:setter withObject:newValue];

プロパティを動的に取得する:

SEL getter = NSSelectorFromString(@"property");
id myProperty = [myObject performSelector:getter];

NSInvocationより複雑な方法については、 andを使用できますNSMethodSignature

SEL action = NSSelectorFromString(@"someMethod:withArguments:");
NSMethodSignature *signature = [myObject methodSignatureForSelector:action];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setArgument:arg1 atIndex:2]; // indices 0 and 1 are reserved.
[invocation setArgument:arg2 atIndex:3];
[invocation invokeWithTarget:myObject];
id returnedObject;
[invocation1 getReturnValue:&returnedObject];
于 2012-11-18T15:35:08.580 に答える