0

我在旧的 iOS 应用程序上运行 ARC“重构”。

但是,我收到以下错误

Receiver type 'WarningCallback' for instance message is a forward declaration

警告回调.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

警告回调.m

#import "WarningViewController.h"


@implementation WarningViewController

@synthesize parentVC;

...

-(IBAction) done:(id) sender {

[[self parentVC] warningDismissedAndNavigateToCall:NO];

}




@end

错误发生在WarningCallback.m的以下行

   [[self parentVC] warningDismissedAndNavigateToCall:NO];
4

2 回答 2

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的。

于 2013-10-08T16:49:47.717 回答
1

删除行:

@class WarningCallback;

声明 a@protocol时,没有必要也将其声明为 a @class,除非您有特定的理由这样做。看:

声明一个类并声明一个具有相同名称的协议是什么?

于 2013-10-08T16:50:27.947 回答