1

私はこれを作りました。

ヘッダ

#import <UIKit/UIKit.h>

typedef BOOL (^validationType)(UITextField *textField);

@interface GLPValidationTextField : UITextField<UITextFieldDelegate>

@property (copy, nonatomic) validationType validation;

@end

#import "GLPValidationTextField.h"

@implementation GLPValidationTextField

@synthesize validation;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)inCoder {
    if (self = [super initWithCoder:inCoder]) {
        self.delegate = self;
    }
    return self;
}



#pragma - mark UITextField delegate

-(BOOL) textFieldShouldEndEditing:(UITextField *)textField{
    return validation(textField);
}

そして、この TextField を IB で設定します。

そして、これを使用します

[self.mailTextField setValidation:validationBlock];

これは仕事です。

-(BOOL) textFieldShouldEndEditing:(UITextField *)textField{
    return validation(textField);
}

このメソッドが呼び出されます。検証できます。

しかし、地球儀のようなボタンでキーボードを選択すると(英語キーボードを日本語キーボードに変更するなど)、Simulator で EXC_BAD_ACCESS が発生します。

ゾンビを有効にしますが、コンソールには何も表示されません。

どうしたの?キーボードを選択したとき。なぜEXC_BAD_ACCESSが発生したのですか?

発生時 EXC_BAD_ACCESS 常に Xcode 表示

libobjc.A.dylib`lookUpMethod:
0x1647a9a:  pushl  %ebp
0x1647a9b:  movl   %esp, %ebp
0x1647a9d:  pushl  %ebx
0x1647a9e:  pushl  %edi
0x1647a9f:  pushl  %esi
0x1647aa0:  subl   $28, %esp
0x1647aa3:  calll  0x1647aa8                 ; lookUpMethod + 14 // Thread 1:EXC_BAD_ACCESS
4

0 に答える 0