覆盖自定义类的方法。 Objective-C的

时间:2013-02-26 04:24:50

标签: objective-c

- (void)setFrame:(CGRect)frame
{
    [super setFrame:frame];

    // code...
}

这基本上就是我在覆盖Objective-C中的标准类方法时所做的。 我创建了一个自定义类myClass,它有一个名为style NSInteger myStyle的变量。

我尝试过同样的事情:

- (void)setMyStyle:(NSInteger)myStyle
{
    [super setMyStyle:myStyle];

    // code...
}

但它没有用,因为找不到这个方法:

[super setMyStyle:myStyle];

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

  

但它没有用,因为找不到这个方法:

在调用[super setMyStyle:myStyle];时,您的超类必须有一个名为setMyStyle的方法。

编辑:

  

我创建了一个自定义类myClass,它有一个名为style NSInteger myStyle的变量。

由于你有一个名为myStyle的变量,你需要为它创建setter和getter。为此,您需要创建方法或使用@property / @synthesize

或者无需创建iVar,您可以直接为myStyle创建属性。

答案 1 :(得分:1)

确保在父类的头文件中声明了您的方法:

//ParentClass.h

@interface ParentClass : ItsParentClass {

}

- (void)setMyStyle:(NSInteger)myStyle;

并且#include子类中的标题

//YourSubClass.h
#import "ParentClass.h"

@interface YourSubClass : ParentClass {

}

当你调用 - [super setMyStyle:]时,编译器希望super的类(ParentClass)具有setMyStyle方法,你不会得到错误。

#import "YourSublass.h"
@implementation YourSublass

- (void)setMyStyle:(NSInteger)myStyle
{
    [super setMyStyle:myStyle];

    // code...
}

@end

答案 2 :(得分:0)

我能想到的另一个原因是,您可能忘记在头类中包含父类?

@interface CustomClass : ParentClass{

}

希望这会有所帮助..