Наименование вновь созданного экземпляра на основе пользовательского ввода - PullRequest
0 голосов
/ 08 октября 2011

У меня есть класс (назовем его foo.m) и мой основной barAppdelegate.m.В моем делегате я хочу создать экземпляр foo.m динамически на основе пользовательского ввода (т. Е. Имя этого экземпляра должно совпадать с тем, что вводит пользователь), и мне нужно отслеживать многие из них.

Ответы [ 3 ]

2 голосов
/ 08 октября 2011

Самое простое решение - создать NSMutableDictionary, в котором будут храниться созданные вами экземпляры foo (это объекты), и задать имя в качестве ключа как NSString.

2 голосов
/ 08 октября 2011

В Objective-C нет абсолютно никакой причины указывать имя переменной во время выполнения.Переменные для вас, программиста (и компилятора).Вам нужно немного переосмыслить свою программу.

Вам нужно, чтобы каждый экземпляр вашего класса Foo был связан со строкой, введенной пользователем.Поэтому вы должны дать классу переменную экземпляра для хранения этой строки.Когда вы создаете объекты, поместите их в коллекцию - либо, как предлагает PengOne, словарь, в котором вы можете снова получить к ним доступ с помощью предоставленной строки, или просто массив.

Если вы действительно думаете, что вы это сделаетенужно извлекать экземпляры в первую очередь по этой строке , тогда словарь является хорошим выбором.Если вам только иногда нужно получить доступ к экземплярам таким образом, используйте массив и посмотрите на indexOfObjectPassingTest:

NSUInteger idx = [myArray indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    if( [[obj name] isEqualToString:stringToTest] ){
        *stop = YES;
        return YES;
    }
}];
0 голосов
/ 08 октября 2011
ClassName myClass = NSClassFromString (@"classname");

ClassName *object = [[myClass alloc] init];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...