从不兼容类型'ViewController*const_strong'分配给'id <Delegate>'

Dav*_*d L 78 delegates objective-c ios

在我的应用程序中,当我设置时,我会收到语义问题警告ViewController.delegate = self.我搜索过并发现了类似的帖子,但没有一个能够解决我的问题.

ViewController.m:

GameAddViewController *gameAddViewContoller = [[navigationController viewControllers] objectAtIndex:0];
gameAddViewContoller.delegate=self;
Run Code Online (Sandbox Code Playgroud)

我在设置时收到错误消息.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
Run Code Online (Sandbox Code Playgroud)

ViewController.h:

#import "GameAddViewController.h"

@class ViewController;
@protocol ViewControllerDelegate <NSObject>
- (void)ViewControllerDidCancel:(ViewController *)controller;

@end
@interface ViewController : UIViewController <ViewControllerDelegate>
-(void) checkAndCreateFile;
@end
Run Code Online (Sandbox Code Playgroud)

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

gio*_*shc 79

在这一行:

gameAddViewContoller.delegate=self; 
Run Code Online (Sandbox Code Playgroud)

请注意,self属于ViewController不符合GameAddViewController协议的类型.

  • 好的,所以我终于明白了.我将它添加到我的头文件// #import"GameAddViewController.h"@interface ViewController:UIViewController <GameAddViewControllerDelegate> @ end // (35认同)
  • 就像@borrrden建议的那样.使`ViewController`符合`GameAddViewControllerDelegate`委托. (2认同)
  • 或者,这可能会帮助其他有类似问题的人:@interface myViewControllerName:UIViewController <MCSessionDelegate> (2认同)
  • 这是如何被接受并获得72票的?这个答案只是改写了XCode的警告,没有提供解决方案。 (2认同)

Rau*_*ndo 60

对我来说最终发生的事情是我没有将代理添加到我的头文件中的@interface

例如

@interface TheNameOfYourClass : UIViewController <TheDelegatorClassDelegate>

@end
Run Code Online (Sandbox Code Playgroud)


bor*_*den 12

您将<GameAddViewControllerDelegate>放在错误的位置.它不在GameAddViewController上,它继续在ViewController上运行.