zoukankan      html  css  js  c++  java
  • 出现“unrecognized selector sent to instance”问题原因之一及解决方法。

     

     

         对于iPhone开发初学者来说,很想实现自己在iPhone上的第一个小程序,准备工作就绪侯就信心满满的开始了!一般来说大家可能都是从Hello World做起吧。
    反正我是的,:),如果按照文档上的说明去做,一般也不会出现什么问题。也建议初学者这样开始,毕竟会增强我们自己的信心。
         但是当我们自己独立去做一个Button实现响应事件的小程序的时候,有时候确给我们出现了一点点小问题。也就是我题目所说的。下边我就列出出现此问题的
    错误代码以及解决方式。
         code:

     

    [cpp] view plaincopy
     
    1. //application delegate 中代码  
    2.   
    3. - (void)applicationDidFinishLaunching:(UIApplication *)application   
    4.   
    5. {      
    6.   
    7.     MainView *mainView = [[MainView alloc]initWithNibName:@"MainView" bundle:nil];  
    8.   
    9.     [self.window addSubview:[mainView view]];  
    10.   
    11.          [mainView release];  
    12.   
    13.     // Override point for customization after application launch  
    14.   
    15.     [window makeKeyAndVisible];  
    16.   
    17. }  
    18. //MainView controller 中代码如下  
    19. //@interface 中声明  
    20.   
    21. - (IBAction)Click:(id)sender;  
    22.   
    23. //@implementation 中实现  
    24.   
    25. - (IBAction) Click:(id)sender  
    26. {  
    27.      NSLog(@"Click Test");  
    28. }  
    nib文件中也是正确连接相应的事件。
     
    以上代码正常运行是没有问题,可是当你点击Click 按钮的时候确出现了如下错误:
     
    "Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***

     

     -[NSCFType buttonClicked:]: unrecognized selector sent to instance 0x44e1e0'
    这时候对于初学者来说这是莫名其妙,反复检查都是没有问题,但是就是会crash。
    
    
    解决方法如下:
    问题的原因就是声明MainView controller的时候出现问题。把MainView声明成立局部变量,
    导致MainView中的action不能正确识别本身的ViewController
    改正很简单:
    MainView 定义在Application的.h文件中就可以了。
    code:

     

    [cpp] view plaincopy
     
    1. #import <UIKit/UIKit.h>  
    2.   
    3. #import "MainView.h"  
    4.   
    5.   
    6. @interface TestAppDelegate : NSObject <UIApplicationDelegate>  
    7.   
    8. {  
    9.   
    10.         UIWindow *window;  
    11.   
    12.     MainView *mainView; //在此定义  
    13.   
    14. }  
    15.   
    16.   
    17.   
    18. @property (nonatomic, retain) IBOutlet UIWindow *window;  
    19.   
    20.   
    21.   
    22. @end  
    
    
    [cpp] view plaincopy
     
    1. - (void)applicationDidFinishLaunching:(UIApplication *)application   
    2. {      
    3.     mainView = [[MainView alloc]initWithNibName:@"MainView" bundle:nil];  
    4.     [self.window addSubview:[mainView view]];  
    5.       
    6.     // Override point for customization after application launch  
    7.     [window makeKeyAndVisible];  
    8.       
    9. }  
    10.   
    11. - (void)dealloc  
    12. {  
    13.     [mainView release];  
    14.     [window release];  
    15.     [super dealloc];  
    16. }  
    希望对大家有帮助。
    当然还有有很多其它情况出现类似的错误,原因基本都是由于viewController继承错误的导致的。
     
  • 相关阅读:
    JavaSE 基础 第51节 定义自己的异常
    JavaSE 基础 第50节 Java中的异常链
    JavaSE 基础 第49节 手动抛出异常
    JavaSE 基础 第48节 Java中的异常声明
    JavaSE 基础 第47节 获取异常信息
    JavaSE 基础 第46节 异常的分类
    JavaSE 基础 第45节Java异常快速入门
    JavaSE 基础 第44节 引用外部类的对象
    JavaSE 基础 第43节 静态内部类
    通用爬虫
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5595408.html
Copyright © 2011-2022 走看看