2012-03-25 13 views
69

En toda mi aplicación, recibo advertencias de problemas semánticos cuando configuro ViewController.delegate = self. He buscado y encontrado publicaciones similares, pero ninguna pudo resolver mi problema.Asignar a 'id <Delegate>' de tipo incompatible 'ViewController * const_strong'

ViewController.m:

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

me sale el mensaje de error al establecer .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 

Puede alguien me punto en la dirección correcta para resolver los mensajes de advertencia?

Respuesta

69

En esta línea:

gameAddViewContoller.delegate=self; 

en cuenta que uno mismo es de tipo ViewController que no sea conforme al protocolo GameAddViewController.

+1

¿Qué debo hacer para solucionarlo? ¿Hay algo que deba cambiar en el protocolo GameAddViewController? –

+0

Bueno, depende de quién quiera ser su delegado. ¿Quién está implementando el protocolo GameAddViewController? – giorashc

+0

GameAddViewController es el elemento secundario de ViewController y estoy implementando el método gameAddViewControllerDidCancel en ViewController. El mensaje de error proviene del método prepareForSegue en ViewController cuando configuro gameAddViewContoller.delegate = self. –

12

Está colocando el < GameAddViewControllerDelegate> en el lugar incorrecto. No va en GameAddViewController, va en ViewController.

54

Para mí lo que terminó sucediendo es que yo no estaba añadiendo el delegado de la @interface en mi archivo de cabecera

Por ejemplo

@interface TheNameOfYourClass : UIViewController <TheDelegatorClassDelegate> 

@end 
+0

¡Funcionó de mi parte, Upvoted !!! – NSPratik

3

Esto podría ayudar a otras personas que están agregando Multipeer Conectividad directo a ViewController. En la parte superior de myViewControllerName.h añadir '<MCSessionDelegate>':

@interface myViewControllerName : UIViewController<MCSessionDelegate> 
0

también, si se define su delegado en xx.m, pero lo utiliza en otra clase. puedes obtener este problema entonces, simplemente ponga protocol defined en xx.h, cuando sea necesario.

Cuestiones relacionadas