0

もう一つの簡単なもの、あなたたちのために私は意味します:

次のような既存のオブジェクトのメソッドを呼び出す必要があります。

[object method];

ただし、オブジェクトの名前は毎回異なります(このコードはスーパークラス用であり、子はすべて異なる名前を持っています)。したがって、次のようなNSStringを使用してオブジェクトを呼び出します。

NSString *objectName = @"object";
[objectName method];

NSClassFromStringについて読んだことがありますが(私は今何時間も探していました)、それは機能しません。次に、次のエラーが発生します:「セレクター'メソッド'の既知のクラスメソッドがありません」。

私が間違っていることを知っていますか?

よろしくお願いします、フラン

4

4 に答える 4

5

変数の名前は、コンパイル時にのみ認識されます。NSStringから変数を自動的に取得する方法はありません。ただし、NSDictionaryを使用して、メソッドを呼び出すことはできます。例:

NSDictionary* dict = @{@"object": object, @"obj2": obj2};
NSString* objectName;
[dict[objectName] method];
于 2012-12-22T18:19:11.650 に答える
1

Cにはリフレクションはありません。できることは、オブジェクトを辞書に入れるか、ivarにすることだけです。

例えば:

@property (nonatomic,strong) id objectName1; // with ARC
@property (nonatomic,strong) id objectName2;
...
@property (nonatomic,strong) id objectNameN;

それで:

NSString* key= @"objectName1"; // objectName1 or whatever
id object= [self valueForKey: key];
[object method];
于 2012-12-22T18:19:51.000 に答える
-1

探しているものはありませんが、isKindOfClassその方法を使って実行することで、このエラーを防ぐことができます。

于 2012-12-22T18:22:08.747 に答える
-1

私がこれを正しく理解していて、クラスメソッドについて話している場合、問題は、作成しているクラスに「直接」メッセージを送信できないことです。を使用する必要がありますperformSelector

SEL method = NSSelectorFromString(@"method");
Class class = NSClassFromString(@"SomeClass");
[(id)class performSelector:method];
于 2012-12-22T19:06:18.497 に答える