Objective-C消息被发送到超类

时间:2013-03-01 16:16:22

标签: objective-c

我从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];
}

3 个答案:

答案 0 :(得分:4)

H2C03是对的。它可能不是SignalView。我会在界面构建器检查器中检查视图的nib文件中的插座,确保它仍然没有说UIView。如果确实将其更改为SignalView:

before

应该是这样的:

after

答案 1 :(得分:2)

然后它只是UIView而不是SignalView的实例。当您需要UIView实例时,您正在分配和初始化SignalView。当你的代码中有这样的东西时:

m_signalView = [[UIView alloc] init];

将其更改为

m_signalView = [[SignalView alloc] init];

答案 2 :(得分:1)

我发现m_signalviewIBOutlet 您是否将其连接到您在Interface Builder中添加的UIView? 如果是这样,您可能需要在其属性中设置正确的类,以便加载程序可以创建正确类的对象。