iOS - “NSObjectFromString”---从字符串构建对象的名称

时间:2012-10-15 16:28:17

标签: iphone ios ipad

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

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

因此,对象名称上的第一个数字表示大小,第二个字母表示该类型。如果用户选择对象大小2和对象种类1,则要加载的对象将是" obj21"。

有没有办法根据对象的名称引用一个对象作为NSString?

类似

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

我需要类似NSSelectorFromString的东西,但在这种情况下,它会根据其名称运行一个方法。我需要的是" NSObjectFromString",它根据字符串的名称引用一个对象。

我该怎么做?感谢。

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

您可以制作工厂方法并使用NSSelectorFromString动态调用它。

此处有更多详情:

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

编辑:

我的回答是我认为同样的问题:

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

Create objective-c class instance by name?