正在将Objective-C消息发送到超类
我已经从UIView派生了一个类SignalView,但是当我向SignalView类型的对象发送消息时,它会被发送到UIView,我得到错误:正在将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 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比你快了一分钟:)