从不兼容的types'ViewController * const_strong'分配给'id <Delegate>'

在我的应用程序中,当我设置ViewController.delegate = self时,出现语义问题警告。 我已经search并find类似的post,但没有人能够解决我的问题。

ViewController.m:

 GameAddViewController *gameAddViewContoller = [[navigationController viewControllers] objectAtIndex:0]; gameAddViewContoller.delegate=self; 

设置.delegate=self时出现错误信息。

GameAddViewController.h:

 @protocol GameAddViewControllerDelegate <NSObject> - (void)gameAddViewControllerDidCancel:(GameAddViewController *)controller; - (void)gameAddViewController:(GameAddViewController *)controller didAddGame:(Game *) game; @end @interface GameAddViewController : UITableViewController <GameAddViewControllerDelegate> { sqlite3 *pitchcountDB; NSString *dbPath; } @property (nonatomic, strong) id <GameAddViewControllerDelegate> delegate; ... @end 

ViewController.h:

 #import "GameAddViewController.h" @class ViewController; @protocol ViewControllerDelegate <NSObject> - (void)ViewControllerDidCancel:(ViewController *)controller; @end @interface ViewController : UIViewController <ViewControllerDelegate> -(void) checkAndCreateFile; @end 

任何人都可以指出我正确的方向来解决警告信息?

在这条线上:

 gameAddViewContoller.delegate=self; 

请注意,self是ViewControllertypes,它不符合GameAddViewController协议。

对我来说最后发生的事情是,我没有将委托添加到我的头文件中的@interface

例如

 @interface TheNameOfYourClass : UIViewController <TheDelegatorClassDelegate> @end 

你把<GameAddViewControllerDelegate>放在错误的地方。 它不在GameAddViewController上,它在ViewController上。

这可能会帮助其他人将Multipeer连接直接添加到ViewController。 在myViewControllerName.h的顶部添加“<MCSessionDelegate>”:

 @interface myViewControllerName : UIViewController<MCSessionDelegate> 

另外,如果你在xx.m上定义你的委托,但你在其他类中使用它。 你可能会遇到这个问题。 所以,只需要在xx.h上放置协议定义。