动态实例命名

时间:2011-09-16 20:26:35

标签: iphone objective-c ios ipad ios4

我正在开发一款iPad App并需要一些帮助。

通过我的应用程序中的按钮,我想一次创建一个对象。 因此,每次触摸按钮时,都应创建一个对象。

我遇到的问题是:我想为每个对象分配一个动态名称来标识这个对象。 这将是:form0,form1,form2,...,formN。

此Name对应于每个对象中的实例变量。 因此form1实例的数字属性为1。

但是如何将此form1,form2等分配给新实例?

我尝试使用返回创建formX-String的方法初始化一个新实例:

-(NSString*)giveMeName{
NSString* simpleName = @"form";
NSString* newName = [simpleName stringByAppendingString:[NSString stringWithFormat:@"%d", questionCounter]];
return newName;

}

其中questionCounter是一个变量,它包含formX和实例编号属性的int标识符。

但是当我想用这个函数初始化一个新实例作为名称时它不起作用:

TSForm* [self giveMeName] = [[TSForm alloc] initWithInt:questionCounter headline:headlineText intro:introText];

显然我对Objective-C的内部工作有些不对劲。 请帮帮我。

4 个答案:

答案 0 :(得分:3)

你想要做的事情是不可能的。一种可以实现您正在寻找的影响的方法是使用NSDictionary。对于您创建的每个TSForm对象,使用giveMeName返回值的键将该对象添加到字典中。

首先,您要创建字典:

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

然后,每次创建对象时,将其添加到字典中:

id *newTSForm = [[TSForm alloc] init]; // Or however you create a TSForm
[formDict setObject:newTSForm forKey:[newTSForm giveMeName]];

然后,当您想要提取您正在寻找的表单时,您只需根据您提供的名称询问字典:

 [formDict valueForKey:nameOfForm]; // nameOfForm is the name provided by giveMeName

希望这有帮助!

答案 1 :(得分:2)

使用NSMutableArray并继续在那里添加项目。

答案 2 :(得分:1)

即使你想要做的事情在技术上是可行的,那就是在低级Objective-C运行时和KVC中使用tricsk等等。

使用简单的NSMutableArray跟踪所有实例(并使用数组中的索引来了解您正在处理的表单)是可行的方法。

我认为你真的不需要你的唯一标识符(如果是这样,你可能会以错误的方式考虑你的项目),只要你在代码中有一种方法来区分每个表单并操纵它们(创建的第一个表单将在索引0处,第二个表示在您的NSMutableDictionary的索引1 ...)

如果由于某种奇怪的原因你真的需要这个特殊的唯一标识符,你仍然可以使用NSMutableDictionary并使用唯一标识符作为你的dict键和表单作为关联值。但是你可能应该再考虑一下你的架构和之前的真正需求,因为根据你在问题中对你的需求的描述来看,这似乎很奇怪的应用程序架构/设计。

答案 3 :(得分:0)

您正在寻找的是某种变量变量,它在objective-C中并不存在。

此问题(Objective C Equivalent of PHP's “Variable Variables”)对获得类似结果有一些不同的建议。