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);
}

并且,用 IB 设置这个 TextField。

并且,使用这个

[self.mailTextField setValidation:validationBlock];

这是工作。

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

这个方法叫。我可以验证。

但是,当我用地球之类的按钮选择键盘(将英文键盘更改为日文键盘或其他东西)时,会在模拟器中出现 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