У меня есть два контроллера представления A
и B
, и они оба имеют друг друга в качестве своих делегатов.
Когда я ничего не сделал, кроме определения протоколов в начале файлов заголовков и #import
другого заголовочного файла, я получил две ошибки в строках -
не может найти декларацию протокола для "BDelegate", которая отображалась в A.h (где я писал) не может найти декларацию протокола для «ADelegate», который отображался в B.h (где я писал)
Глядя в Интернете, люди писали ранее, что циклическое включение файлов заголовков может привести к проблемам. Они рекомендовали либо использовать вместо #include
, либо @class
объявление типа -
@class A
вместо
#import A.h
внутри #import Bh
Я пробовал почти все комбинации этого импорта и @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