iOS开发之unrecognized selector sent to instance错误

来源:互联网 发布:杭州亿购网络 编辑:程序博客网 时间:2024/05/24 04:16
最近今天在编写一个学习系统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  

此处只是拿简单的例子举例,在其他例子中,也有可能出现类似问题,大家不妨试一下。如果还有其他方式的,可以发表评论,大家互相学习。

0 0
原创粉丝点击