iOS開發之unrecognized selector sent to instance錯誤

最近今天在編寫一個學習系統ios版本,遇到了unrecognized selector sent to instance 0x7fe0f314de10 類似這樣的錯誤。

我這個程序的大體意思是一個viewcontroller A中需要包含另外一個viewcontroller B或者自定義的viewB,這樣可以在A中定義一個B屬性。定義之後按常理,在a中獲得b屬性,直接賦值就可以了,但是卻會拋出上面的錯誤。經過查找資料和親自測試,發現只要把定義在.m文件中的局部成員變量b,剪切到.h文件中變成全局變量就可以了。這個錯誤不僅出現在我的這個例子中,在其他btn響應事件啊,等等都會出現此問題,大家不妨試一下把成員變量的位置,從.m文件複製到.h文件中。

爲方便大家理解,特找到類似的代碼,方便大家理解上面的意思。

**//application delegate 中代碼**  
- (void)applicationDidFinishLaunching:(UIApplication *)application 
{      
    WTView *WTView = [[WTView     alloc]initWithNibName:@"WTView" bundle:nil];  

   [self.window addSubview:[WTView view]];  

   [window makeKeyAndVisible];  

 }  

//自定義的WTView controller 中代碼如下
//@interface 中聲明
- (IBAction)Click:(id)sender;

//@implementation 中實現

  • (IBAction) Click:(id)sender
    {
    NSLog(@”Click Test”);
    }

nib文件中也是正確連接相應的事件。
以上代碼正常運行是沒有問題,可是當你點擊Click 按鈕的時候確出現瞭如下錯誤:

-[NSCFType buttonClicked:]: unrecognized selector sent to instance 0x44e1e0

這時候對於初學者來說莫名其妙,反覆檢查都是沒有問題,但是就是會crash。

解決方法如下:
問題的原因就是聲明MainView controller的時候出現問題。把MainView聲明成立局部變量,導致MainView中的action不能正確識別本身的ViewController

改正很簡單:
MainView 定義在Application的.h文件中就可以了。

#import <UIKit/UIKit.h>  
#import "WTView.h"  

@interface TestAppDelegate : NSObject <UIApplicationDelegate>  
{  
        UIWindow *window;  
        WTView *WTView; //在此定義  
}  
@property (nonatomic, retain) IBOutlet UIWindow *window;  

@end  

此處只是拿簡單的例子舉例,在其他例子中,也有可能出現類似問題,大家不妨試一下。如果還有其他方式的,可以發表評論,大家互相學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章