2013-11-14 36 views
5

這裏是我TextValidator類:iOS的錯誤:「XXXX」無可見@interface聲明選擇「頁頭」

//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類和poorly從NSObject和據我所知init和alloc函數已經在基類中定義。那麼爲什麼程序會出現這樣的錯誤呢?

請注意,我已經檢查this主題,它不適用於我。

回答

14

我的心理調試器,沒有讀取你的代碼,告訴我你打電話alloc對象實例,而不是一個類。 alloc方法是由類定義的靜態方法(通常從NSObject繼承),它返回基礎對象的新實例。你不能要求一個實例分配自己!

現在看代碼,我看到你想要的:

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

構造一個新的實例,並將其分配給myValidator財產。

1

您創建對象的語法不正確。正確的代碼:

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

更換

[[self.myValidator alloc] init]; 

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

,你還沒有實現的self.myValidatoralloc實例方法,這是真正的錯誤信號。但是這是一種適用於所有NSObject對象的類方法。

+0

正確加1 –

0

對於那些誰得到"no visible @interface for declares the selector ..."

這樣的錯誤的錯誤通常發生在您沒有正確輸入方法的名稱,或該方法完全不屬於那類,並在不存在的class

0

我今天有這個問題,並自行解決它。基本上你也不能滿足功能/程序的所有要求。

進入課程本身並確保您聲明所有要求。

我把這個類從頭文件庫中拿出來,逐字比較以驗證它與使用它的函數相匹配。

0

如果您隨機遇到此問題(如當您更改分支時),而不是因爲您忘記聲明瞭選擇器。

轉到文件檢查>目標會員

  1. 取消選中目標
  2. 再檢查一遍

File Inspector

這將刷新你的project.pbxproj

然後,如果你建,你會看到你真正的問題

0

對於其他: 檢查varible名字像類名。 它發生在我身上。

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

不要告訴任何人像我現在所做的那樣。

相關問題