Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Obj C:检查NSUserDefaults中的整数_Ios_Xcode_If Statement - Fatal编程技术网

Ios Obj C:检查NSUserDefaults中的整数

Ios Obj C:检查NSUserDefaults中的整数,ios,xcode,if-statement,Ios,Xcode,If Statement,这是我的情况-让我们看看是否有编码天才可以帮助我 因此,我的情况是: 我在NSUserDefaults中存储了一个名为@“scifi1”的整数-它可以是……比如说250+个值中的一个-非顺序,但都是已知的(即,它来自多项选择) 我需要检查所述整数的值,并根据它是什么执行不同的操作 现在,我的代码是这样的 if ([[NSUserDefaults standardUserDefaults] integerForKey:@"scifi1"] == 040){ [self sp

这是我的情况-让我们看看是否有编码天才可以帮助我

因此,我的情况是:

我在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];
        }
虽然这是可行的,但一旦您添加了几十个代码,代码就变得 a) 很长 b) 当使用几种不同的方法时,iPhone无法合理处理的时间太长了,事实上Xcode抛出了一个GCC4.2错误告诉我这一点

那么什么是最好的检查方法呢?必须有一个更好的方法,然后重复“如果”语句

我尝试设置开关/案例样式的设置,但由于整数不是常量,它似乎对此不满意——老实说,从长远来看,我不确定使用开关/案例是否比使用多个if语句更好

有人有什么好主意吗

编辑:

好的,我已经试过了

-(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传递到check和runup——有没有办法实现这一点呢?

我正要说“使用开关”,但你说这些值不是常数。在这种情况下,我建议:

  • 将整数存储在一个值中,并使用该值进行比较,而不是调用
    standardUserDefaults
    integerWorkey:
    1000次

  • 如果检查之间有,请使用
    else。正如您现在所看到的,如果第一次检查成功,那么所有其他检查仍然会完成,即使您不需要执行它们

  • 如果可能,尝试先将值映射到常量,然后使用开关,或者如果您有一些常量值,请先使用开关检查这些值

  • 如果该方法变得太大,您可能会将其拆分为几个方法,每个方法检查一组选项可能有一个条件,您可以检查该条件以知道要计算哪个方法,如
    If(value>=1000&&value<2000)
    。如果没有,请确保有一个返回值,告诉您是否需要进行额外的检查


  • 我只是尝试了一些不同的东西-你可以看看我即将抛出的编辑。你可以给你的方法添加一个参数,比如
    -(void)checkandrunup:(NSInteger)tempInt
    ;-)那么,这会不会和torpup方法中的tempint相同?(有点发现我的脚还在这里哈哈)@david26:不是自动的,当然你也需要这样称呼它:
    [self-checkandrunup:myOtherTempInt]
    [自检和运行:[[NSUserDefaults standardUserDefaults]整数工作:@“scifi1”]第二个选项不起作用-基本上每次运行一个方法时,我都让它将其“Scifi1”(或2,3,4,5)的值存储到tempInt中-我希望将其传递给一个单独的方法,以减少重复编码。我还没有到能够得到准确的引用的程度,但我知道它不会对正在检查的if的数量感到高兴。如果按照你的回答,我用其他的,如果我不知道这是否会让它更快乐…我会试试。