关于iphone:iOS – “NSObjectFromString” – 从字符串构建对象的名称

iOS - “NSObjectFromString”— building the name of an object from string

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

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

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

有没有一种方法可以根据对象的名称作为nsstring来引用它?

类似的东西

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

我需要类似nsselectorfromstring的东西,但在本例中,它基于其名称运行一个方法。我需要的是类似于"nsObjectfromString"的东西,它以字符串的形式引用一个基于其名称的对象。

我该怎么做?谢谢。


因为这是不可能的,所以最好将对象存储在nsdictionary(或其可变对应物)中,并使用您构建的字符串作为该对象的键。

下面是一个奇怪的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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];


您可以创建一个工厂方法,并使用NSSelectorFromString动态调用它。

详细信息如下:

http://Deavix.COMP/COML/MAC/OXI文档/ COCOA/参考/基础/杂项/基础功能/参考/参考文献.HTML

编辑:

我对我所认为的问题的回答是相同的:

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

是否按名称创建Objective-C类实例?