Я хотел бы переопределить метод в классе Objective C, к которому у меня нет источника.Использование супер в объективной категории C?
Я изучил его, и кажется, что Категории должны позволить мне это сделать, но я хотел бы использовать результат старого метода в своем новом методе, используя super, чтобы получить результат старых методов.
Всякий раз, когда я пытаюсь это сделать, мой метод вызывается, но «супер» - это ноль ... Любая идея почему? Я занимаюсь разработкой iPhone с помощью SDK XCode 2.2. Я определенно работаю с экземпляром класса, а метод класса - это метод экземпляра.
@implementation SampleClass (filePathResolver)
-(NSString*) fullPathFromRelativePath:(NSString*) relPath
{
NSString *result = [super fullPathFromRelativePath: relPath];
... do some stuff with the old result
return result;
}
Примечание и уточнение: Из того, что я могу видеть в Apple, Docs, то мне кажется, что это должно быть разрешено?
Categories docs at developer.apple.com: Когда категория переопределяет наследуемый метод, метод в категории может, как обычно, вызовите унаследованную реализацию через сообщение к супер. Однако, если категория переопределяет метод, который уже существовал в классе категории, там не может ссылаться на реализацию .
ли вы когда-нибудь найти решение этой проблемы? Я пытаюсь изменить параметр текста, поскольку он передается в метод setText: UILabel. Я не хочу подкласса UILabel (огромная база кода), поэтому категория, скорее всего, подходит. Я тоже думаю, что вызов super setText сделал бы трюк, если супер объект был на самом деле UILabel, но тогда он скорее всего приведет к бесконечному циклу, вызывающему setText: определенному в категории. Поэтому ясно, что это, вероятно, невероятный подвиг для категории. –
Эй! Я никогда не нашел другого решения, кроме того, что было опубликовано на этой странице. Используйте метод swizzling или другой метод в категории ;-( –