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函数已在基类中定义。 那么为什么程序会出现这样的错误呢?
请注意,我已经检查了这个主题,但它对我不起作用。
我的通灵调试器,没有读取你的代码,告诉我你在一个对象实例而不是一个类上调用alloc
。 alloc
方法是由类(通常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它是否与使用它的函数匹配。
如果您经常随意地体验(比如当您更换分支时),而不是因为您忘记声明选择器。
转到文件检查器 > 目标成员身份
- 取消选中目标
- 然后再检查一下
这将刷新project.pbxproj
然后,如果你建立,你会看到你真正的问题
对于其他人:检查变量名称与类名称不同。 好吧,它发生在我身上。
XXXViewController * XXXViewController = [[XXXViewController alloc] init];
不要像我现在那样告诉任何人。
- 在ios中使用查询string创buildNSURLRequest
- iOS UISearchBar背景颜色在iOS 9中
- fileManager.createFileAtPath始终失败
- iOS8问题 – 不调用UIView drawRect
- iOS – 检查应用程序中的推送通知支持
- connectionDidFinishLoading:不使用[NSURLConnection sendAsynchronousRequest:queue:completionHandler:
- 从集合视图移动到详细视图时如何使用CoreData
- 两个不同的视图控制器如何能够相互通信
- 更新/将内容插入iPhone应用程序更新中的现有Sqlite数据库