Obj C: проверка на целое число в NSUserDefaults - PullRequest
0 голосов
/ 26 апреля 2011

Вот моя ситуация - давайте посмотрим, могут ли какие-нибудь гении кодирования помочь мне!

Моя ситуация такова:

У меня есть целое число, хранящееся в 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 для проверки и запуска - есть ли способ добиться этого?

1 Ответ

2 голосов
/ 26 апреля 2011

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

  1. Сохраните целое число в значении и используйте его для сравнения вместо того, чтобы вызывать standardUserDefaults и integerForKey: тысячу раз.

  2. Используйте else if между вашими чеками.Как и сейчас, если первая проверка прошла успешно, все остальные проверки все еще выполняются, даже если вам не нужно их выполнять.

  3. Если возможно, попробуйте сопоставить значения сконстанты сначала, а затем используйте переключатель или, если у вас есть некоторые постоянные значения, сначала проверьте их с помощью переключателя.

  4. Если метод становится слишком большим, вы можете разделить его на несколько методовкаждый проверяет группу опций. Может быть, есть условие, которое вы можете проверить, чтобы узнать, какой метод затем ячейки, например if (value >= 1000 && value < 2000).Если нет, убедитесь, что у вас есть возвращаемое значение, которое говорит о необходимости дополнительных проверок.

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