iOS错误:’xxxx’没有可见的@interface声明选择器’alloc’

这是我的TextValidator类:

//TextValidator.h #import  @interface TextValidator : NSObject - (BOOL) isValidPassword:(NSString *)checkPassword; - (BOOL) isValidEmail:(NSString *)checkString; - (BOOL) isEmpty:(NSString *)checkString; @end // TextValidator.m #import "TextValidator.h" @implementation TextValidator - (BOOL) isEmpty:(NSString *)checkString { return YES; } - (BOOL) isValidPassword:(NSString *)checkPassword { return YES; } - (BOOL) isValidEmail:(NSString *)checkString { return YES; } @end 

这是我尝试在ViewController.m中初始化TextValidator类的方法:

 //ViewController.h #import  @interface SignUpViewController : UIViewController  @end //ViewController.m #import "SignUpViewController.h" #import "TextValidator.h" @interface SignUpViewController () @property TextValidator *myValidator; @end @implementation SignUpViewController - (void)viewDidLoad { [[self.myValidator alloc] init]; //iOS error: No visible @interface for 'TextValidator' declares the selector 'alloc'* [super viewDidLoad]; } @end 

当我尝试编译代码时,我收到以下错误:

 No visible @interface for 'TextValidator' declares the selector 'alloc'. 

TextValidator类inheritance自NSObject,据我所知,init和alloc函数已在基类中定义。 那么为什么程序会出现这样的错误呢?

请注意,我已经检查了这个主题,但它对我不起作用。

我的通灵调试器,没有读取你的代码,告诉我你在一个对象实例而不是一个类上调用allocalloc方法是由类(通常inheritance自NSObject )定义的静态方法,它返回底层对象的新实例。 你不能要求实例分配自己!

现在看代码,我看到你想要:

 self.myValidator = [[TextValidator alloc] init]; 

构造一个新实例,并将其分配给myValidator属性。

更换

 [[self.myValidator alloc] init]; 

 self.myValidator = [[TextValidator alloc] init]; 

该错误表示您尚未为self.myValidator实现alloc实例方法,这是真的。 但这是一个适用于所有NSObject对象的类方法。

您创建对象的语法不正确。 正确的代码:

 self.myValidator = [[TextValidator alloc] init]; 

对于那些得到错误"no visible @interface for declares the selector ..."

如果您输入方法的名称输入错误,或者该方法根本不属于该类且在您的类中不存在,则通常会发生此类错误

我今天遇到了这个问题,并且我自己解决了这个问题。 基本上你也可能无法满足function/程序的所有要求。

进入课堂本身并确保您宣布所有要求。

我把这个类从标题库中取出并逐字逐字比较,以validation它是否与使用它的函数匹配。

如果您经常随意地体验(比如当您更换分支时),而不是因为您忘记声明选择器。

转到文件检查器 > 目标成员身份

  1. 取消选中目标
  2. 然后再检查一下

文件检查员

这将刷新project.pbxproj

然后,如果你建立,你会看到你真正的问题

对于其他人:检查变量名称与类名称不同。 好吧,它发生在我身上。

 XXXViewController * XXXViewController = [[XXXViewController alloc] init]; 

不要像我现在那样告诉任何人。