正在将Objective-C消息发送到超类

正在将Objective-C消息发送到超类,objective-c,Objective C,我已经从UIView派生了一个类SignalView,但是当我向SignalView类型的对象发送消息时,它会被发送到UIView,我得到错误: -[UIView Initialise]: unrecognized selector sent to instance 0x1b3900 “我的对象”在“调试监视”窗口中也显示为UIView对象: m_signalview UIView * 0x001b3900 有关守则如下: // signalview.h #import <

我已经从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];
}
//signalview.h
#进口
@接口信号视图:UIView
{   
}
-(无效)草签;
@结束
//signalview.m
#导入“SignalView.h”
@接口信号视图()
@结束
@实现信号视图
-(无效)草签
{
}
//viewcontroller.h
#进口
#导入“SignalView.h”
@界面ViewController:UIViewController
@属性(弱、非原子)IBOutlet SignalView*m_SignalView;
@结束
//viewcontroller.m
#导入“ViewController.h”
@界面视图控制器()
@结束
@实现视图控制器
@综合m_信号视图;
-(无效)viewDidLoad
{
[超级视图下载];
NSLog(@“%@”,m_signalview);
[m_signalview初始化];
}

那么它只是
UIView
的一个实例,而不是
SignalView
。当您需要一个
SignalView
实例时,您正在分配和初始化
UIView
。当代码中有类似的内容时:

m_signalView = [[UIView alloc] init];
换成

m_signalView = [[SignalView alloc] init];

我看到
m_signalview
是一个
IBOutlet

您是否将其连接到您在Interface Builder中添加的
UIView

如果是这样,您可能需要在其属性中设置正确的类,以便加载程序可以创建正确类的对象。

H2C03是正确的。这可能不是一个信号视图。我会在interface builder检查器的视图nib文件中检查您的插座,确保它仍然没有显示UIView。如果确实将其更改为SignalView:

应该是这样的:


由于它是一个IBOutlet,我怀疑它是在nib@hooleyhoop在这种情况下,Interface Builder可能无法识别自定义类,而是创建了一个
UIView
。我不会感到惊讶。你的方法名称应该是小写的。这是一个强大的Obj-C惯例,因此属性名称不以IVAR的
m_
开头。@synthesis指令对于大多数属性都是可选的。filipe比你快了一分钟:)