从不兼容的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是ViewController
types,它不符合GameAddViewController
协议。
对我来说最后发生的事情是,我没有将委托添加到我的头文件中的@interface
例如
@interface TheNameOfYourClass : UIViewController <TheDelegatorClassDelegate> @end
你把<GameAddViewControllerDelegate>放在错误的地方。 它不在GameAddViewController上,它在ViewController上。
这可能会帮助其他人将Multipeer连接直接添加到ViewController。 在myViewControllerName.h的顶部添加“<MCSessionDelegate>”:
@interface myViewControllerName : UIViewController<MCSessionDelegate>
另外,如果你在xx.m上定义你的委托,但你在其他类中使用它。 你可能会遇到这个问题。 所以,只需要在xx.h上放置协议定义。