我从UIView派生了一个类SignalView但是当我向SignalView类型的对象发送消息时,它被发送到UIView并且我收到错误:
-[UIView Initialise]: unrecognized selector sent to instance 0x1b3900
我的对象在调试监视窗口中也显示为UIView对象:
m_signalview UIView * 0x001b3900
相关代码是:
// signalview.h
#import <UIKit/UIKit.h>
@interface SignalView : UIView
{
}
-(void)Initialise;
@end
//signalview.m
#import "SignalView.h"
@interface SignalView ()
@end
@implementation SignalView
-(void)Initialise
{
}
// viewcontroller.h
#import <UIKit/UIKit.h>
#import "SignalView.h"
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet SignalView *m_signalview;
@end
// viewcontroller.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize m_signalview;
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%@", m_signalview);
[m_signalview Initialise];
}
答案 0 :(得分:4)
H2C03是对的。它可能不是SignalView。我会在界面构建器检查器中检查视图的nib文件中的插座,确保它仍然没有说UIView。如果确实将其更改为SignalView:
应该是这样的:
答案 1 :(得分:2)
然后它只是UIView
而不是SignalView
的实例。当您需要UIView
实例时,您正在分配和初始化SignalView
。当你的代码中有这样的东西时:
m_signalView = [[UIView alloc] init];
将其更改为
m_signalView = [[SignalView alloc] init];
答案 2 :(得分:1)
我发现m_signalview
是IBOutlet
您是否将其连接到您在Interface Builder中添加的UIView
?
如果是这样,您可能需要在其属性中设置正确的类,以便加载程序可以创建正确类的对象。