Вот моя ситуация - давайте посмотрим, могут ли какие-нибудь гении кодирования помочь мне!
Моя ситуация такова:
У меня есть целое число, хранящееся в NSUserDefaults под именем @ "scifi1" - это может быть одно из .... скажем, 250+ значений - непоследовательное, но всем известное (то есть из множественного выбора)
Мне нужно проверить значение указанного целого числа и в зависимости от того, что оно выполняет, выполнить другое действие.
Теперь мой код в таком виде
if ([[NSUserDefaults standardUserDefaults] integerForKey:@"scifi1"] == 040){
[self spaceup];
}
if ([[NSUserDefaults standardUserDefaults] integerForKey:@"scifi1"] == 10040){
[self spaceup];
[self ctrlup];
}
if ([[NSUserDefaults standardUserDefaults] integerForKey:@"scifi1"] == 20040){
[self spaceup];
[self altup];
}
И хотя это работает, после добавления еще десятков код становится
а) очень долго
б) Когда сделано для нескольких различных методов, iPhone слишком долго обрабатывает, и фактически Xcode выдает ошибку GCC 4.2, сообщающую мне об этом.
Так, каков лучший способ проверить это? должен быть лучший способ, чем повторные операторы «если».
Я попытался настроить стиль переключателя / дела, но так как целые числа не являются константами, мне это показалось недовольным - и, честно говоря, я не уверен, что переключение / дела лучше для меня в долгосрочной перспективе чем иметь несколько операторов if.
У кого-нибудь есть какие-нибудь острые идеи?
Edit:
Хорошо, я попробовал это как эксперимент.
-(void)checkandrunup {
if (tempInt == 040){
[self spaceup];
}
if (tempInt == 10040){
[self spaceup];
[self ctrlup];
}
if (tempInt == 20040){
[self spaceup];
[self altup];
}
if (tempInt == 30040){
[self spaceup];
[self shiftup];
}}
-(IBAction)torpup{
//If to check for edit and display popover
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"viewEdit"] == YES) {
}
else {
NSInteger tempInt = [[NSUserDefaults standardUserDefaults] integerForKey:@"scifi1"];
}
//First Sound
if([[NSUserDefaults standardUserDefaults] boolForKey:@"viewHidden"] == YES) {
NSString *path = [NSString stringWithFormat:@"%@%@",
[[NSBundle mainBundle] resourcePath],
@"/beep1.WAV"];
SystemSoundID soundID;
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
AudioServicesPlaySystemSound(soundID); }
//Second Sound
else {
NSString *path = [NSString stringWithFormat:@"%@%@",
[[NSBundle mainBundle] resourcePath],
@"/beep2.WAV"];
SystemSoundID soundID;
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
AudioServicesPlaySystemSound(soundID);
}
}
Однако tempInt не проходит из Torpup для проверки и запуска - есть ли способ добиться этого?