Поскольку недавно у меня был цикл импорта, я перемещаю все операторы #import
(касающиеся моих собственных файлов) из заголовка в соответствующий .m
-файл. Я также добавил предварительные объявления @class
и @protocol
, чтобы успокоить компилятор. Тем не менее, я все еще получаю следующее предупреждение:
Cannot find the protocol definition for 'MyCustomDelegate'.
Как я уже сказал, существует @protocol MyCustomDelegate
, прежде чем я использую его в @interface
-Block. Интересно, что это предупреждение возникает только в том случае, если соответствующий делегат объявлен в другом файле (чей заголовок импортирован в файл .m
).
Я читал, что одно из решений состоит в том, чтобы объявить делегат в отдельном файле заголовка и импортировать этот файл непосредственно в заголовок класса, который реализует делегат. Это действительно правильный путь? Есть ли другие решения? Я думаю, что эти делегаты уже достаточно раздули наш код, теперь я должен продолжить и даже объявить для него собственный файл?
Небольшой пример кода для лучшей иллюстрации проблемы:
NewFooController.h
#import <UIKit/UIKit.h>
@protocol NewFooControllerDelegate;
@interface NewFooController : UITableViewController
@property (nonatomic, weak) id<NewFooControllerDelegate> delegate;
@end
@protocol NewFooControllerDelegate
@end
HomeTableViewController.h
#import <UIKit/UIKit.h>
@protocol NewFooControllerDelegate;
// warning points to line below
@interface HomeTableViewController : UITableViewController <NewFooControllerDelegate>
@end
HomeTableViewController.m
#import "HomeTableViewController.h"
#import "NewFooController.h"
@implementation HomeTableViewController
@end