0

我有几个我想使用的对象,比如 obj11、obj21、obj33 等。

正确使用对象的选择取决于用户定义的一些参数,例如:要使用的大小和对象的种类。

因此,对象名称上的第一个数字代表大小,第二个字母代表种类。如果用户选择对象大小 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];

按名称创建objective-c类实例?

于 2012-10-15T19:51:55.693 回答