Xcode предупреждает об отсутствии определения протокола, хотя используется @protocol.

Поскольку недавно у меня был цикл импорта, я перемещаю все операторы #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
6
задан Florian Pilz 3 May 2012 в 21:35
поделиться