динамическое именование экземпляров - PullRequest
2 голосов
/ 17 сентября 2011

Я разрабатываю приложение для iPad и мне нужна помощь.

Через кнопку в моем приложении я хочу создать один объект за раз.Таким образом, каждый раз, когда нажимается кнопка, должен быть создан один объект.

Проблема, с которой я столкнулся, заключается в следующем: я хочу назначить каждому объекту динамическое имя для идентификации этого объекта.Это может быть что-то вроде: form0, form1, form2, ..., formN.

Это имя соответствует переменной экземпляра в каждом объекте.Таким образом, экземпляр form1 имеет числовой атрибут, равный 1.

Но как мне назначить этот form1, form2 и т. Д. Новому экземпляру?

Я попытался инициализировать новый экземпляр с помощьювозврат метода, который создает formX-String:

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

}

, где questionCounter - переменная, которая содержит идентификатор int для formX и атрибут номера экземпляра.

Но когда я хочу инициализировать новый экземпляр с помощью этой функции в качестве имени, оно не работает:

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

Очевидно, я что-то не так понял во внутренней работе Objective-C.Пожалуйста, помогите мне.

Ответы [ 4 ]

3 голосов
/ 17 сентября 2011

то, что вы пытаетесь сделать, на самом деле не возможно.Один из способов добиться нужного эффекта - использовать 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

Надеюсь, это поможет!

2 голосов
/ 17 сентября 2011

используйте NSMutableArray и продолжайте добавлять туда свои элементы.

1 голос
/ 17 сентября 2011

Даже если то, что вы пытаетесь сделать, технически возможно, это использует tricsk в низкоуровневой среде выполнения C и KVC и т. Д. Бесплатно.

Использование простого NSMutableArray для отслеживания всехваши экземпляры (и использование индекса в массиве, чтобы узнать, с какой формой вы имеете дело) - это путь.

Я не думаю, что вам действительно нужны ваши уникальные идентификаторы для этого (если это так, вывозможно, вы думаете о вашем проекте неправильно), если в вашем коде есть способ дифференцировать каждую форму и манипулировать ими (первая созданная форма будет тогда с индексом 0, вторая с индексом 1… вашего NSMutableDictionary)

Если вам действительно нужен этот уникальный уникальный идентификатор, по какой-то странной причине, вы все равно можете использовать NSMutableDictionary и использовать уникальный идентификатор в качестве ключа своего dict, а форму - в качестве связанного значения.Но вам, вероятно, стоит подумать дважды о своей архитектуре и реальной необходимости в этом раньше, поскольку это кажется довольно странной архитектурой / дизайном приложения, чтобы сделать это на основе вашего описания ваших потребностей в вашем вопросе.

0 голосов
/ 17 сентября 2011

То, что вы ищете, это какая-то переменная переменная, которой на самом деле нет в target-C.

Этот вопрос (Цель C Эквивалент «Переменных переменных» в PHP) имеет несколько разных предложений для получения похожих результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...