0

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

3 回答 3

4

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

前

应该是这样的:

后

于 2013-03-01T16:22:41.660 回答
2

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

m_signalView = [[UIView alloc] init];

将其更改为

m_signalView = [[SignalView alloc] init];
于 2013-03-01T16:19:17.590 回答
1

我看到那m_signalview是一个IBOutlet.
您是否将其连接到UIView您在 Interface Builder 中添加的内容?
如果是这样,您可能需要在其属性中设置正确的类,以便加载器可以创建正确类的对象。

于 2013-03-01T16:22:09.763 回答