Использование содержимого NSString в качестве имени NSArray - PullRequest
0 голосов
/ 17 июня 2011

Есть ли способ использовать содержимое строки NSString в качестве имени указателя NSArray? Возможно, что это недоступно, но, возможно, есть другой метод для чего-то вроде этого:

NSString*one=@"hi";
NSString*two=@"yo";

NSArray*testarray=[[NSArray alloc] initWithObjects:one, two, nil];

NSLog(@"actual count: %i", [testarray count]);

NSString*testname=@"testarray";
NSLog(@"test count: %i",[ --insert here to get array name from testname-- count]);

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

Ответы [ 3 ]

2 голосов
/ 17 июня 2011

Для этого вы можете использовать кодирование значения ключа (см. Руководство по программированию кодирования значения ключа ).

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

Использование KVC в основном полезно для привязки значений к вашей модели или к конкретным подобным вещам, но, как правило, не является предпочтительным способом, если вы можете вместо этого использовать прямые свойства ivars / @.

1 голос
/ 17 июня 2011
NSString*one=@"hi";
NSString*two=@"yo";

NSDictionary *testDic=[NSDictionary dictionaryWithObjectsAndKeys:
              [NSArray arrayWithObjects:one, two, nil], 
              @"testarray" ,nil];

NSLog(@"actual count: %i", [testarray count]);

NSString*testname=@"testarray";
NSLog(@"test count: %i",[[testDic objectForKey:testname] count]);
0 голосов
/ 17 июня 2011

Я не уверен, что вам это нужно, но ...

Вы можете вызывать метод по его имени:

NSString *methodName = @"...";
SEL selector = NSSelectorFromString(methodName);
[objectRef performSelector:selector];

Этот метод может возвращать ссылку на ваш массив.Это должно работать так.

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