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