0

古い 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];
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 に答える