Использование строки, представляющей имя переменной, для установки переменной - PullRequest
2 голосов
/ 15 апреля 2011

Это базовый пример, который, я знаю, можно упростить, но для тестирования я бы хотел сделать это таким образом. Я хочу установить переменную на основе добавляемой строки (переменные «cam0» и «pos1» уже объявлены в классе). Добавляемая строка по существу будет индексом, и я бы повторил цикл, чтобы назначить камеры (cam0, cam1 ..) различным позициям (pos0, pos1 ..).

cam0 определяется как UIImageView
pos1 определяется как CGRect

Это работает для переменной NSString с именем coverIndex:

NSString* text = [[NSString alloc] initWithString:@""];
NSLog(@"%@",(NSString *)[self performSelector:NSSelectorFromString([text stringByAppendingString:@"coverIndex"])]);

Правильная строка, которую я установил для coverIndex, была зарегистрирована в консоли.

Теперь вернемся к моему UIImageView и CGRect. Я хочу, чтобы это сработало.

NSString* camText = [[NSString alloc] initWithString:@"cam"];
NSString* posText = [[NSString alloc] initWithString:@"pos"];

[(UIImageView *)[self performSelector:NSSelectorFromString([camText stringByAppendingString:@"0"])] setFrame:(CGRect)[self performSelector:NSSelectorFromString([posText stringByAppendingString:@"1"])]];

Моя ошибка: "Запрошено преобразование в нескалярный тип"

Это единственный способ, который я нашел, чтобы делать подобные вещи (и заставить работать NSLog), но я все еще верю, что есть более простой способ.

Большое спасибо за любую помощь:)

Ответы [ 2 ]

4 голосов
/ 16 апреля 2011

Используйте KVC , это удивительная технология, которая будет делать то, что вы хотите:

for (int index = 0; index < LIMIT; index++) {

    NSString *posName = [NSString stringWithFormat:@"pos%d", index];
    CGRect pos = [[self valueForKey:posName] CGRectValue];
    NSString *camName = [NSString stringWithFormat:@"cam%d", index];

    UIImageView *cam = [self valueForKey:camName];
    cam.frame = pos;
}
2 голосов
/ 15 апреля 2011

Один из способов сделать это - создать свои камеры в словаре и использовать эти специальные строки NSS для ввода его. Мол,

NSMutableDictionary *myCams;
myCams = [[myCams alloc] init];
[myCams addObject:YOUR_CAM0_OBJECT_HERE forKey:@"cam[0]"];
[myCams addObject:YOUR_CAM1_OBJECT_HERE forKey:@"cam[1]"];

NSString camString = @"cam[0]"; // you'd build your string here like you do now
id theCamYouWant = [myCams objectForKey:camString];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...