0

別のView Controllerにある2つのメソッドを繰り返したいと思います。これが私のコードです(状況を説明するためにコードが明確でない場合はコメントを追加してください):

最初の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);
}

2 番目のビュー コントローラー:

-(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

4

1 に答える 1

0

まず、touchesBegan直接電話してはいけません。このメソッドは、レシーバーでタッチが検出されたときに呼び出されます。

第二に、アップルのドキュメントは、touchesBeganメソッドについて次のように述べています。

super (一般的な使用パターン) を呼び出さずにこのメソッドをオーバーライドする場合は、スタブ (空の) 実装としてのみであれば、タッチ イベントを処理する他のメソッドもオーバーライドする必要があります。

そのため、まずtouchesBeganコードから への直接呼び出しを削除し、別のメソッドに移動します。

次に、実装する場合は;touchesBeganを呼び出す必要があります。[super touchesBegan:touches withEvent:event]

編集

あなたが何を望んでいるかを正しく理解している場合(そうでない場合は修正してください)touchesBegan、テキストフィールドが選択されたときからコードを実行し、ifステートメントがfalseのときにコードを実行します。したがって、私の以前のステートメントはまだ有効- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)eventであり、システムによって提供され、レスポンダー ビューでタッチ イベントが検出されたときに呼び出されるメソッドであるため、[SecondVC performSelector:@selector(touchesBegan:withEvent:)];. ユーザーが UITextFiled をタップしたときと if ステートメントが false のときに同じコードを実行する場合は、そのコードを別のメソッドに抽出しtouchesBegan、if ステートメントが false のときにそのメソッドを呼び出す必要があります。

于 2013-05-12T13:12:40.087 に答える