У меня есть два view controllers A
и B
, и они оба имеют друг друга в качестве своих делегатов.
Когда я ничего не делал, кроме определения протоколов в начале файлов заголовков и #import
другого файла заголовка, я получил две ошибки по строкам -
не может найти объявление протокола для "BDelegate", которое показывалось в A.h(где я писал) не может найти объявление протокола для "ADelegate", который показывался в B.h(где я писал)
В онлайн-поиске люди писали ранее, что круговое включение заголовочных файлов может привести к проблемам. Они рекомендовали либо использовать #include
вместо, либо @class
декларация вроде -
@class A
вместо
#import A.h
внутри #import B.h
Я пробовал почти любую комбинацию этих импортов и @classes
и #include
, но все равно не могу избавиться от предупреждений. Кроме того, в онлайн-решениях рекомендуется перемещать файлы #import
в .m
, но это тоже не помогло. Одна из причин заключается в том, что решения в Интернете являются нечеткими - если бы вы могли сломать это, было бы здорово.
Любые предложения о том, что можно сделать, чтобы исправить это?
- BigViewController.h -
#import "BaseViewController.h"
#include "BaseViewController.h"
@class BigViewController;
@protocol BigViewControllerDelegate
-(void) BigViewController:(BigViewController *) bigView;
@end
@interface BigViewController : UIViewController <BaseViewControllerDelegate>
{
//delegate
id <BigViewControllerDelegate> delegate;
ivars...
}
@properties...
@end
--------------------------------------------------
- BaseViewController.h -
#<UIKit/UIKit.h>
#import "BigViewController.h"
#include "BigViewController.h"
@class BigViewController;
@protocol BaseViewControllerDelegate
- (void) setParametersWithItemChosen:(Item *) item;
@end
@interface BaseViewController : UIViewController <...BigViewControllerDelegate...>
{
ivars...
//delegate
id <BaseViewControllerDelegate> delegate;
}
@properties...
@end