Я попытался закомментировать импорт делегата и увидел, где возникла ошибка, и обнаружил, что то, что я импортировал, когда импортировал делегат, на самом деле было декларацией, которую импортировал делегат, т.е. я импортировал A (также мой делегат), A импортировал B, то, что я фактически использовал, было B. Поэтому я оставил импорт A закомментированным и добавил импорт для B. Затем я мог вернуть порядок протокола импорта обратно, как это было.
я два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