iOS开发之unrecognized selector sent to instance错误

在iOS开发中,当尝试调用未声明的方法时,会出现'unrecognized selector sent to instance'错误。这个问题通常发生在试图访问或操作未初始化的对象时。通过将局部变量提升为全局(在.h文件中声明),可以解决这种类型的问题。例如,如果在viewcontroller A中包含viewcontroller B或自定义viewB,确保正确声明和初始化B,避免在响应事件或按钮点击时出现此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近今天在编写一个学习系统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  

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值