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

时间:2013-11-14 10:02:31

标签: ios objective-c alloc

这是我的TextValidator类:

//TextValidator.h
#import <Foundation/Foundation.h>

@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 <Foundation/Foundation.h>

@interface SignUpViewController : UIViewController <UITextFieldDelegate>
@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类继承自NSObject,据我所知,init和alloc函数已在基类中定义。那么为什么程序会出现这样的错误?

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

7 个答案:

答案 0 :(得分:15)

我的通灵调试器,在没有阅读您的代码的情况下,告诉我您在对象实例而不是类上调用allocalloc方法是由类(通常继承自NSObject)定义的静态方法,它返回基础对象的新实例。你不能要求实例分配自己!

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

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

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

答案 1 :(得分:9)

替换

[[self.myValidator alloc] init];

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

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

错误的人

这种错误通常发生在您输入方法名称时输入错误,或者该方法根本不属于该类且在您的类中不存在时

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

如果您经常随意地遇到这种情况(比如在更换分支时),不是因为您忘记申报选择器。

转到文件检查器&gt; 目标会员

  1. 取消选中目标
  2. 然后再检查
  3. File Inspector

    这会刷新你的project.pbxproj

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