2012-06-08 2 views
1

Вот что я пытаюсь сделать:Объявление подкласса в ObjC терпит неудачу

Я хочу, чтобы убрать некоторые методы в отдельный .h и .m файлов для лучшего обзора моего кода.

Итак, у меня есть myViewController, который я хочу расширить с помощью метода myReactionOnAnimationDidEnd:как категории.

Так что я объявил в "myCustomClasses.h" следующее распространить его с моим желаемым способом:

#import "myViewController.h" 
@interface myViewController (myReactionOnAnimationDidEnd) 
- (void)myReactionOnAnimationDidEnd:(NSNotification *)aNotification; 
@end 

Реализация в "myCustomClasses.m" является:

#import "myCustomClasses.h" 
#import "myViewController.h" 

@implementation myViewController (myReactionOnAnimationDidEnd)  
- (void)myReactionOnAnimationDidEnd:(NSNotification *)aNotification { 

    self.myLabel1.text = @"Test"; 
} 
@end 

Компилятор генерирует ошибку сборки не удалось «Не удается найти интерфейс декларация для «myViewController»

Итак, вот мои вопросы:

  1. Первая Странная вещь, что все работает нормально, если я сделать то же самое для UIViewController вместо myViewController. Но поскольку myViewController является подклассом UIViewController, почему он не должен работать и для myViewController (@interface iSnahViewController: UIViewController)?

  2. Другое странное, что @implementation в «myCustomClasses.m» работает отлично, если я полностью пропущу на @declaration. Теперь, как это может быть?

Спасибо, ребята! Любая помощь очень ценится !! Hans


Теперь, самое смешное, что эта же ошибка здание приходит даже если я создаю категорию с новым файлом -> ObjC - Категория шаблона. Это в основном создает следующие два файла:

в заголовочном файле:

#import "myViewController.h" 

@interface myViewController (myCategories) //<-- "Cannot find interface declaration for 'myViewController'" 



@end 

и с .m файл

#import "myViewController+myCategories.h" 

@implementation myViewController (myCategories) 


@end 

И это уже достаточно, чтобы вызвать ошибку сверху.

+1

Неясно, какие отношения между myViewController и iSnahViewController. Также, где происходит ошибка компилятора? –

+0

Возможно, вы захотите переформулировать свой вопрос, потому что вы не создаете подкласс, вы создаете категорию. – Martin

+0

@PhillipMills: Извините, я немного небрежно настраивал имена для лучшей читаемости, iSnahViewController - это myViewController (я скорректировал его в своем вопросе) – Hans

ответ

0

Я, наконец, получил его!

Как произошла ошибка здания, я импортирование Категории-.h файла в .h файл primery класса:

#import "myViewController+myCategories.h" //<-- in the "myViewController.h" 

, которые приводят к ошибке здания сверху. Кажется, это неправильно! Так что не делай этого.

Я до сих пор не совсем понимаю, как класс «myViewController» узнает о его категориях, даже не импортировав их .h-файлы, но поскольку это выглядит как рабочий способ, как это делается, я хотел Поделиться с тобой.

Спасибо всем за помощь!

+0

Если вы ответите на свой вопрос, отметьте этот ответ правильно. –

0

myCustomClasses.m должен, вероятно, включать myCustomClasses.h, а не myViewController.h, поэтому компилятор видит объявление категории. Поскольку myCustomClasses.h уже включает в себя myViewController.h, компилятор должен иметь все необходимые объявления.

+0

Спасибо, просто попробовал, но это не сработало. – Hans

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