0

obj11、obj21、obj33 など、使用したいオブジェクトがいくつかあります。

使用する正しいオブジェクトの選択は、ユーザーが定義したいくつかのパラメーター (使用するサイズやオブジェクトの種類など) によって異なります。

したがって、オブジェクト名の最初の数字はサイズを表し、2 番目の文字は種類を表します。ユーザーがオブジェクト サイズ 2 とオブジェクトの種類 1 を選択した場合、ロードするオブジェクトは "obj21" になります。

名前に基づいてオブジェクトを NSString として参照する方法はありますか?

何かのようなもの

NSString *name = [NSString stringWithFormat:@"obj%d%d", size, kind];
["use object name" doSomething];

NSSelectorFromString のようなものが必要ですが、この場合はその名前に基づいてメソッドを実行します。必要なのは、名前に基づいてオブジェクトを文字列として参照する「NSObjectFromString」のようなものです。

それ、どうやったら出来るの?ありがとう。

4

2 に答える 2

3

これは不可能なので、オブジェクトを NSDictionary (またはその変更可能な対応物) に格納し、作成した文字列をそのオブジェクトのキーとして使用することをお勧めします。

奇妙な例を次に示します。

NSMutableDictionary *objectDict = [[NSMutableDictionary alloc] init];

... init your objects somehow ...

// build your keys somehow and add the object to the dict
int size = 1;
int kind = 2;

NSString *name = [NSString stringWithFormat:@"obj%d%d", size, kind];
[objectDict addObject:obj12 forKey:name];

... Do some stuff ...

// access your object and call a method
id obj =  [objectDict objectForKey:name];
[obj doSomething];
于 2012-10-15T16:30:03.543 に答える
0

ファクトリ メソッドを作成し、それを使用NSSelectorFromStringして動的に呼び出すことができます。

詳細はこちら:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html

編集:

私が思うことに対する私の答えは同じ質問です:

id object = [[NSClassFromString(@"NameofClass") alloc] init];

名前で目的のcクラスのインスタンスを作成しますか?

于 2012-10-15T19:51:55.693 に答える