如果变量为null,如何形成if语句来重复方法?

时间:2013-05-12 11:52:06

标签: ios if-statement crash null

我想重复我在两个单独的视图控制器中的方法。这是我的代码(如果代码不清楚以解释情况,请添加注释):

First View Controller:

-(void)GettingVariable {
    NSString *VariableGotFromSVC = [(AppDelegate *)[[UIApplication sharedApplication] delegate] VariableGotFromSVC;
    NSNumberFormatter * NsFormatterMethod= [[NSNumberFormatter alloc] init];
    [NsFormatterMethod setNumberStyle:NSNumberFormatterDecimalStyle];

    myNumberVariable = [NsFormatterMethod numberFromString:VariableGotFromSVC];

    if (!myNumberVariable) {
        Ayarlar *SecondVC = [[Ayarlar alloc]init];
        [SecondVC performSelector:@selector(touchesBegan:withEvent:)];
    }

    NSLog(@"mynumbervariable:%@", myNumberVariable);
}

第二视图控制器:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
    [(AppDelegate *)[[UIApplication sharedApplication] delegate] setVariable:VariableTextField.text];

    MekanListesi *FirstVC=[[MekanListesi alloc]init];
    [FirstVC GettingVariable];
}

该代码与该消息崩溃:

  

0x1e640b0:cmpl(%eax),%ecx

1 个答案:

答案 0 :(得分:0)

首先,您不应直接致电touchesBegan。在接收器上检测到触摸时调用此方法。

其次,apple doc说明了touchesBegan方法:

  

如果在不调用super的情况下覆盖此方法(常用)   pattern),你还必须覆盖其他处理触摸的方法   事件,如果仅作为存根(空)实现。

首先,从代码中移除对touchesBegan的直接调用,然后将其移至另一种方法。

其次,如果您实施touchesBegan,则应致电[super touchesBegan:touches withEvent:event];

修改

如果我正确理解你想要的东西(如果不是,请纠正我)你想在选择文本字段时和{if = false}时执行代码touchesBegan。 因此,我之前的语句仍然有效- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event是系统提供的方法,并在响应者视图上检测到触摸事件时调用,因此您不应直接在代码中调用它,如[SecondVC performSelector:@selector(touchesBegan:withEvent:)];。 如果要在用户点击UITextFiled时执行相同的代码,并且if语句为false,则应将该代码提取到单独的方法中,并在touchesBegan和if语句为false时调用该方法。 / p>