我在旧的iOS应用程序上运行ARC'重构'。
但是,我收到以下错误
Receiver type 'WarningCallback' for instance message is a forward declaration
WarningCallback.h
@class WarningCallback;
#import <UIKit/UIKit.h>
#import "WebViewController.h"
#import "Constants.h"
@protocol WarningCallback
-(void) warningDismissedAndNavigateToCall:(BOOL) navigateToCall;
@end
@interface WarningViewController : WebViewController {
}
@property (nonatomic,retain) WarningCallback* parentVC;
@end
WarningCallback.m
#import "WarningViewController.h"
@implementation WarningViewController
@synthesize parentVC;
...
-(IBAction) done:(id) sender {
[[self parentVC] warningDismissedAndNavigateToCall:NO];
}
@end
错误发生在 WarningCallback.m
的以下行 [[self parentVC] warningDismissedAndNavigateToCall:NO];
答案 0 :(得分:1)
错误是因为行@class WarningCallback;
。错误消息表示编译器找到了WarningCallback
的前向声明,但无法找到相应的实现。那是因为WarningCallback
不是一个类,而是一个协议。
如果要转发声明协议,可按以下步骤进行:
@protocol WarningCallback;
@interface WarningViewController : WebViewController
@property (nonatomic, weak) id<WarningCallback> parentVC;
@end
@protocol WarningCallback
- (void)warningDismissedAndNavigateToCall:(BOOL) navigateToCall;
@end
请注意我是如何声明parentVC
的。
答案 1 :(得分:1)
删除该行:
@class WarningCallback;
声明@protocol
时,除非您有特定原因,否则无需将其声明为@class
。参见:
What's with the declare a class and declare a protocol with the same name?