2013-02-26 2 views
0
- (void)setFrame:(CGRect)frame 
{ 
    [super setFrame:frame]; 

    // code... 
} 

Это в основном то, что я делал, чтобы переопределить стандартные методы классов в Objective-C. Я создал собственный класс myClass, который имеет переменную типа NSInteger myStyle.Переопределение методов пользовательского класса. Objective-C

Я попробовал то же самое:

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

    // code... 
} 

Но это не работает, так как он не может найти этот метод:

[super setMyStyle:myStyle]; 

Любые предложения?

+1

Что означает «не работает»? –

+1

Что вы подразумеваете под «... имеет переменную под названием стиль NSInteger myStyle»? Если это фактически переменная (а не метод или свойство с автоматически сгенерированными методами), то нет ничего, чтобы переопределить, поскольку нет метода. – lnafziger

ответ

1

Но это не работает, так как он не может найти этот метод:

Как вы вызываете [super setMyStyle:myStyle]; ваш супер класс должен иметь метод с именем setMyStyle.

EDIT:

Я создал пользовательский класс MyClass, который имеет переменную стиль NSInteger MyStyle.

Поскольку у вас есть переменная с именем myStyle, вам необходимо создать для нее сеттер и геттер. Для этого вам необходимо создать методы или использовать @property/@synthesize.

Или вам не нужно создавать iVar, вы можете непосредственно создать объект для myStyle.

+0

Он уже сказал, что у него есть этот метод; Я считаю, что проблема заключается в том, что автозаполнение Xcode не может найти его, потому что его суперкласс не объявляет его в файле интерфейса. –

+0

XCode автоматически создает метод setMyStyle:. Я хочу это переопределить. Каждый раз, когда я устанавливаю переменную myStyle, используя setMyStyle: я хочу, чтобы она действительно была установлена, а также сделать что-то еще. –

+0

XCode не создает setMyStyle для iVar, он создает для свойства. –

0

Еще одна причина, по которой я мог подумать, возможно, вы забыли включить родительский класс в свой класс заголовков?

@interface CustomClass : ParentClass{ 

} 

Надеется, что это помогает ..

1

Убедитесь, что ваш метод, объявленным в файле заголовок для родительского класса:

//ParentClass.h 

@interface ParentClass : ItsParentClass { 

} 

- (void)setMyStyle:(NSInteger)myStyle; 

И что вы #include заголовка в подклассе

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

@interface YourSubClass : ParentClass { 

} 

Этот способ, когда вы вызываете - [super setMyStyle:] компилятор ожидает класс super (ParentC lass), чтобы иметь метод setMyStyle, и вы не получите ошибку.

#import "YourSublass.h" 
@implementation YourSublass 

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

    // code... 
} 

@end 
Смежные вопросы